记录编号 22311 评测结果 AAAAAAAAAA
题目名称 教官 最终得分 100
用户昵称 GravatarPom 是否通过 通过
代码语言 C++ 运行时间 4.095 s
提交时间 2010-11-18 15:50:58 内存使用 0.50 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>

using namespace std;

long long n,i,j,k,sum[10001],tot=0,num[10001],a[10001],ci,MAX;
bool b[10001];
long long ans=1;

void init()
{
	freopen("officer.in","r",stdin);
	freopen("officer.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",a+i);
	}
}

long long gcd(long long a,long long b)
{
	long long i,j;
	i=a; j=b;
	if (i<j) swap(i,j);
	while (i%j)
	{
		i=i%j;
		swap(i,j);
	}	
	return j;
}

void solve()
{
	memset(b,false,sizeof(b));
	for (i=1;i<=n;i++)
	{
		j=i;
		ci=0;
		do
		{
			j=a[j];
			ci++;
		}
		while (j!=i);
		ans=ans/gcd(ans,ci);
		ans*=ci;
	}
	cout<<ans<<endl;
}

int main()
{
	init();
	solve();
	return 0;
}