結果

問題 No.3441 Sort Permutation 2
コンテスト
ユーザー tau1235
提出日時 2026-02-07 04:36:22
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
AC  
実行時間 458 ms / 2,000 ms
コード長 537 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 5,058 ms
コンパイル使用メモリ 350,104 KB
実行使用メモリ 17,988 KB
最終ジャッジ日時 2026-02-07 04:36:46
合計ジャッジ時間 22,798 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
#include<atcoder/dsu>
using namespace std;

int main(){
	int n;
	cin>>n;
	vector<int> p(n);
	atcoder::dsu uf(n);
	for (int i=0;i<n;i++){
		cin>>p[i],p[i]--;
		uf.merge(i,p[i]);
	}
	vector<int> ans(n);
	for (auto g:uf.groups()){
		sort(g.begin(),g.end());
		int m=g.size();
		if (m==1) continue;
		int val=0;
		for (int i=1;i<m;i++) val=gcd(val,g[i]-g[0]);
		for (int k=1;k*k<=val;k++){
			if (val%k==0){
				ans[k]+=m-1;
				if (k*k!=val) ans[val/k]+=m-1;
			}
		}
	}
	for (int i=1;i<n;i++) cout<<ans[i]<<endl;
}
0