結果
| 問題 | No.3441 Sort Permutation 2 |
| コンテスト | |
| ユーザー |
👑 potato167
|
| 提出日時 | 2026-01-04 14:08:21 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 48 ms / 2,000 ms |
| コード長 | 1,141 bytes |
| 記録 | |
| コンパイル時間 | 2,055 ms |
| コンパイル使用メモリ | 217,664 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2026-02-06 20:51:36 |
| 合計ジャッジ時間 | 6,111 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 41 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<int> P(N + 1);
for (int i = 1; i <= N; i++) cin >> P[i];
vector<char> vis(N + 1, 0);
vector<long long> freq(N, 0); // freq[g] for g in [0..N-1], g>=1 used
for (int i = 1; i <= N; i++) {
if (vis[i]) continue;
vector<int> cyc;
int x = i;
while (!vis[x]) {
vis[x] = 1;
cyc.push_back(x);
x = P[x];
}
int L = (int)cyc.size();
if (L <= 1) continue;
int base = cyc[0];
int g = 0;
for (int t = 1; t < L; t++) {
g = std::gcd(g, abs(cyc[t] - base));
}
// g is in [1..N-1]
freq[g] += (long long)(L - 1);
}
vector<long long> ans(N, 0); // ans[k], k=1..N-1
for (int k = 1; k <= N - 1; k++) {
long long s = 0;
for (int m = k; m <= N - 1; m += k) {
s += freq[m];
}
ans[k] = s;
}
for (int k = 1; k <= N - 1; k++) {
cout << ans[k] << "\n";
}
return 0;
}
potato167