Cod sursa(job #18431)

Utilizator gurneySachelarie Bogdan gurney Data 18 februarie 2007 12:11:11
Problema Culori Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 1.45 kb
program culori;
  const
    fin='culori.in';
    fout='culori.out';
    nmax=256;
    eps=9901;
  var
    e:array[1..nmax*2-1] of integer;
    m:array[1..256,1..256] of longint;
    i,j,k,n,x,l,mid:integer;
begin
  assign(input,fin);
    reset(input);
    readln(n);
    for i:=1 to n*2-1 do
      read(e[i]);
  close(input);
  assign(output,fout);
    rewrite(output);
    for i:=1 to 2*n-1 do
      m[i,i]:=1;
    for i:=1 to 2*n-3 do
      if e[i]=e[i+2] then
        begin
          m[i,i+2]:=1;
          m[i+1,i+1]:=0;
        end;
    l:=5;
    while l<=2*n-1 do
      begin
        for i:=1 to 2*n-l do
          begin
            if e[i]<>e[l+i-1] then
              m[i,l+i-1]:=0
            else
              begin
                j:=i+2;
                m[i,l+i-1]:=m[i+1,l+i-2];
                while j<l+i-1 do
                  begin
                    if e[j]=e[i] then
                      begin
                        m[i,l+i-1]:=(m[i,l+i-1]+m[i,j]*m[j,i+l-1])mod eps;
                      end;
                    j:=j+2;
                  end;
              end;
          end;
        for i:=1 to 2*n-l do
          for j:=i+2 to l+i-1 do
            begin
              if m[i,i+l-1]>m[i,j] then
                m[i,j]:=0;
              if m[i,i+l-1]>m[j,i+l-1] then
                m[j,i+l-i]:=0;
            end;
        inc(l,2);
      end;
    writeln(m[1,2*n-1] mod eps);
  close(output);
end.