Cod sursa(job #18232)

Utilizator andrei_blanaruAndrei Blanaru andrei_blanaru Data 18 februarie 2007 10:54:19
Problema Reguli Scor 90
Compilator fpc Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.92 kb
{reguli}
const maxlung=500000;
var n,l:longint;
    a,d:array [0..maxlung] of int64;
    p:array [0..maxlung] of longint;


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

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

procedure prel;
var i:longint;
begin
  l:=1;
  for i:=1 to n-2 do
      if d[i]<>d[i mod l]
        then  l:=i+1-p[i];
end;

procedure scrie;
var i:longint;
begin
  assign(output,'reguli.out');
  rewrite(output);
  writeln(l);
  for i:=0 to l-1 do
    writeln(d[i]);
  close(output);
end;

begin
  citire;
  prefix;
  prel;
  scrie;
end.