http://hihocoder.com/contest/hiho167/problem/1
注意求完大小以后,答案是他们的 最小公倍数
还有就是 求lcm的时候可能乘起来会爆int
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=150;
int a[maxn];
ll c[maxn];
set<int>s;
int gcd(int a,int b)
{
return b==0? a:gcd(b,a%b);
}
ll gcd_x(int a,int b){
return (long long )a*b/gcd(a,b);
}
int main()
{ int m;
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&a[i]);
}
s.clear();
int ans=-1;
for(int i=1;i<=m;i++){
//s.insert(i);
s.clear();
int t=a[i];
while(s.find(i)==s.end())
{ s.insert(a[t]);
t=a[t];
}
c[i]=(int)s.size()+1;
}
//cout<<"???"<<endl;
ll cc=c[1];
ll ss=c[1];
for(int i=2;i<=m;i++){
ss=gcd_x(cc,c[i]);
cc=ss;
}
printf("%d\n",ss);
return 0;
}