Cod sursa(job #27210)

Utilizator vladcyb1Vlad Berteanu vladcyb1 Data 6 martie 2007 11:25:08
Problema Reguli Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.21 kb
  {$I-,Q-,R-,S-}

  const
       FIN = 'reguli.in';
       FOUT = 'reguli.out';
       NMAX = 500000;


  var
      A : array[ 0..NMAX ] of int64;
      PI : array[ 0..NMAX ] of longint;
      f, g : text;
      N, i, min, k, q  : longint;
      s : string;
      x0, x1 : int64;

  procedure read_data;
   var i, cod : longint;
       s : string;
   begin
    assign( f, FIN ); reset( f );
    readln( f, N );
    readln( f, s ); val( s, x0, cod );
    for i := 2 to N do
      begin
        readln( f, s );
        val( s, x1, cod );
        A[ i - 1 ] := x1 - x0;
        x0 := x1;
      end;
   close( f );
   N := N - 1;
  end;

 procedure kmp;
  begin
   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 k := k + 1;
     pi[ q ] := k;
    end;
end;

 procedure save;
  begin
    assign( g, FOUT ); rewrite( g );
    min := n - pi[n];
    writeln( g, min );
    for i  := 1 to min do
       begin
       { str( A[i], s );
        writeln( g, s ); }
        writeln( g, A[i] );
       end;
  close( g );
 end;

  begin
   read_data;
   kmp;
   save;
  end.