Cod sursa(job #73098)

Utilizator ProtomanAndrei Purice Protoman Data 16 iulie 2007 19:08:55
Problema Cutii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.27 kb
var f1,f2:text;
    n,t,i,j,k,max,aux,w,e,q,q1,w1,e1:longint;
    x,y,z,v,ax:array[1..4000] of longint;
    a:array[1..4000] of qword;

procedure radix(n:longint);
var p,i,j,k,x,nr:longint;
    m:array[0..10,1..3500] of qword;
begin
        p:=1;
        for i:=1 to 20 do
        begin
                for j:=0 to 9 do m[j,0]:=0;
                for j:=1 to n do
                begin
                        x:=a[j] div p mod 10;
                        m[x,m[x,0]+1]:=a[j];
                        inc(m[x,0]);
                end;
                nr:=0;
                for j:=0 to 9 do
                begin
                        for k:=1 to m[j,0] do
                        begin
                                inc(nr);
                                a[nr]:=m[j,k];
                        end;
                end;
                p:=p*10;
        end;
end;

begin
        assign(f1,'cutii.in');
        reset(f1);
        assign(f2,'cutii.out');
        rewrite(f2);
        read(f1,n,t);
        for k:=1 to t do
        begin
                for i:=1 to n do
                begin
                        read(f1,x[i],y[i],z[i]);
                        a[i]:=x[i];a[i]:=a[i]*100000000;
                        a[i]:=a[i]+y[i]*10000;
                        a[i]:=a[i]+z[i];
                end;
                radix(n);
                for i:=1 to n do
                begin
                        x[i]:=a[i] div 100000000;
                        y[i]:=a[i] mod 100000000 div 10000;
                        z[i]:=a[i] mod 10000;
                end;
                for i:=n downto 1 do
                begin
                        max:=0;
                        for j:=i+1 to n do
                        begin
                                if (x[i]<x[j])and(y[i]<y[j])and(z[i]<z[j])and(v[j]>max) then max:=v[j];
                                if n-j=max then break;
                        end;
                        v[i]:=max+1;
                end;
                max:=0;
                for i:=1 to n do
                begin
                        if max<v[i] then max:=v[i];
                        v[i]:=0;
                end;
                writeln(f2,max);
        end;
        close(f1);
        close(f2);
end.