Cod sursa(job #169171)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 1 aprilie 2008 12:31:04
Problema Reguli Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.97 kb
program reguli;
var f,g:text;
    d,v:array[1..500000] of longint;
    ok,okk:boolean;
    n,a,b,i,k,l:longint;

procedure prefix;
    begin
      k:=0; v[1]:=0;
      for i:=2 to n-1 do
        begin
          while (k>0)and(d[k+1]<>d[i]) do k:=v[k];
          if d[k+1]=d[i] then k:=k+1;
          v[i]:=k;
        end;
    end;

begin
assign(f,'reguli.in'); reset(f);
readln(f,n);
readln(f,a);
for i:=1 to n-1 do
  begin
    readln(f,b);
    d[i]:=b-a;
    a:=b;
  end;
close(f);

prefix;

ok:=false;
l:=1; n:=n-1;
while not ok do
  begin
    a:=n mod l; b:=n div l;
    if (v[n-a]>0)and((n-a) mod (n-a-v[n-a])=0)and((n-a) div (n-a-v[n-a])=b) then
       begin
         okk:=true;
          for i:=1 to a do
             if d[i]<>d[b*l+i] then okk:=false;
        if okk then ok:=true;
       end;
     inc(l);
  end;

assign(g,'reguli.out'); rewrite(g);
writeln(g,l-1); if l-1>0 then for i:=1 to l-1 do writeln(g,d[i]);
close(g);

end.