记录编号 22165 评测结果 AAAAAAAAAA
题目名称 教官 最终得分 100
用户昵称 Gravatarybh 是否通过 通过
代码语言 Pascal 运行时间 0.032 s
提交时间 2010-11-17 15:24:17 内存使用 0.16 MiB
显示代码纯文本
{教官 NOIP模拟2010-11-17
 Author: yangbohua
 Time: 2010-11-17}

program officer;
var
  a:array[0..10000] of longint;
  b:array[0..10000] of boolean;
  n,i,x,temp:longint;
  ans:int64;

function gcd(y,z:int64):int64;
begin
  if z=0
    then gcd:=y
    else gcd:=gcd(z,y mod z);
end;

begin
  assign(input,'officer.in');
  reset(input);
  assign(output,'officer.out');
  rewrite(output);
  readln(n);
  for i:=1 to n do
    readln(a[i]);
  fillchar(b,sizeof(b),false);
  for i:=1 to n do
  begin
    if a[i]=i then continue;
    x:=i;
    temp:=1;
    while a[x]<>i do
    begin
      if b[x]=false then
      begin
        b[x]:=true;
        x:=a[x];
        temp:=temp+1;
      end
      else break
    end;
    if a[x]=i then
    begin
      if i=1
        then ans:=temp
        else ans:=(ans div gcd(ans,temp))*temp;
    end;
  end;
  writeln(ans);
  close(input);
  close(output);
end.