Cod sursa(job #78805)

Utilizator gurneySachelarie Bogdan gurney Data 19 august 2007 20:27:31
Problema Reguli Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.33 kb
program reguli;
  const
    fin='reguli.in';
    fout='reguli.out';
  var
    a:array[1..500000] of int64;
    pi:array[1..500000] of longint;
    d,q,i,c,r,j,k,n:longint;
    t:array[0..1] of int64;
    old,new:longint;
    x,y:int64;
    ok:array[1..500000] of boolean;
begin
  assign(input,fin);
    reset(input);
    readln(n);
    readln(t[0],t[1]);
    a[1]:=t[1]-t[0];
    new:=1;old:=0;
    for i:=3 to n do
      begin
        old:=new;new:=old xor 1;
        readln(t[new]);
        a[i-1]:=t[new]-t[old];
      end;
    dec(n);
  assign(output,fout);
    rewrite(output);
    k:=0;
    pi[1]:=0;
    for q:=2 to n do
      begin
        while (k>0) and (a[k+1]<>a[q]) do
          k:=pi[k];
        if a[k+1]=a[q] then
          inc(k);
        pi[q]:=k;
      end;
    k:=n;
    while k>0 do
      begin
        ok[pi[k]]:=true;
        k:=pi[k];
      end;
    for d:=1 to n do
      begin
        c:=n div d;
        r:=n-c*d;
        if ok[r] then
        begin
          x:=n-r-pi[n-r];
          y:=(n-r) div x;
          if (x<>0) then
            if (y=(n-r)/x)and(y=c) then
              begin
                writeln(n);
                for i:=1 to n do
                  writeln(a[i]);
                break;
              end;
        end;
      end;
  close(output);
end.