比赛 20101117 评测结果 AAAAAAAAAA
题目名称 教官 最终得分 100
用户昵称 苏轼 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2010-11-17 09:00:04
显示代码纯文本
program officer(input,output);

var
  i,n,t:integer;
  ans:int64;
  a:array[1..10000]of integer;
  boo:array[1..10000]of boolean;

function lcs(a,b:int64):int64;
  var
    t,m:int64;
  begin
    m:=a*b;
    if a<b then
    begin
      t:=a;
      a:=b;
      b:=t;
    end;

    t:=a mod b;
    while t<>0 do
    begin
      a:=b;
      b:=t;
      t:=a mod b;
    end;

    exit(m div b);
  end;

function go(const wh:integer):integer;
  begin
    if not(boo[wh]) then
    begin
      boo[wh]:=true;
      exit(go(a[wh])+1);
    end
    else
      exit(0);
  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]);

  ans:=1;
  for i:=1 to n do
    if not(boo[i]) then
    begin
      t:=go(i);
      ans:=lcs(t,ans);
    end;

  writeln(ans);

  close(input);
  close(output);
end.