Cod sursa(job #93401)

Utilizator girl_styleBianca Boeriu girl_style Data 18 octombrie 2007 18:42:39
Problema Reguli Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.21 kb
var a,p:array[1..500000] of int64;
    n:longint;

procedure citire;
var i:longint;
    x,y:int64;
begin
  assign(input,'reguli.in');
  reset(input);
  readln(n);
  readln(x);
  for i:=2 to n do
    begin
      readln(y);
      a[i-1]:=y-x;
      x:=y;
    end;
  close(input);
  n:=n-1;
end;

procedure prefix;
var k,i:longint;
begin
  p[1]:=0;
  k:=0;
  for i:=2 to n do
   begin
    while (k>0) and (a[k+1]<>a[i]) do
      k:=p[k];
    if a[k+1]=a[i] then
      inc(k);
    p[i]:=k;
   end;
end;

function ok(r:longint):boolean;
var i:longint;
begin
  for i:=1 to r do
    if a[i]<>a[n-r+i] then
      begin
        ok:=false;
        exit;
      end;
  ok:=true;
end;

procedure afis(l:longint);
var i:longint;
begin
  writeln(l);
  for i:=1 to l do
    writeln(a[i]);
end;

procedure secv;
var l,r,c:longint;
begin
  for l:=1 to n do
    begin
      r:=n mod l;
      c:=n div l;
      if (p[n-r]>0) and ((n-r) mod (n-r-p[n-r])=0) and
         ((n-r)/(n-r-p[n-r])=c) and ok(r) then
       begin
        afis(l);
        exit;
       end;
    end;
end;

begin
  assign(output,'reguli.out');
  rewrite(output);
  citire;
  prefix;
  secv;
  close(output);
end.