Cod sursa(job #18937)

Utilizator vladcyb1Vlad Berteanu vladcyb1 Data 18 februarie 2007 15:00:59
Problema Culori Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.26 kb

  const
      FIN = 'culori.in';
      FOUT = 'culori.out';
      NMAX = 600;
      prim = 9901;


 VAR
     A : array[ 1..NMAX, 1..NMAX ] of longint;
     color : array[ 1..NMAX ] of longint;
     f, g : text;
     N, i, j, k, l, left, t : longint;



 procedure read_Data;
  begin
   assign( f, FIN ); reset( f );
   readln( f, N );
   for i := 1 to 2 * N - 1 do read( f, color[i] );
   close( f );
   N := 2 * n - 1;
  end;

  procedure dinamica;
    begin
     fillchar( a, sizeof( a ), 0 );
     for i := 1 to N do A[i,i] := 1;
     for t := 2 to (n + 1)  div 2 do
       begin
         l := 2 * t - 1;
         for j := 1 to N - l + 1 do
           if color[j] = color[ j + l - 1 ] then
              begin
               left := j + l - 1;
               for k := j + 1 to left - 1 do
                 if color[k] = color[j] then
                 A[ j, left ] := ( A[ j, left ] + A[ j, k ] * A[ k+1, left-1 ] ) mod prim;

                 A[ j, left ] := ( A[ j, left ] + A[ j + 1, left - 1 ] ) mod prim;
              end;
       end;
   end;

  procedure save;
   begin
    assign( g, FOUT ); rewrite( g );
    writeln(  g, A[ 1, N ]);
    close( g );
   end;

   begin
    read_data;
    dinamica;
    save;
    end.