Cod sursa(job #10294)

Utilizator bigsarpeadrian bigsarpe Data 28 ianuarie 2007 10:19:52
Problema Secventa 5 Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.27 kb
{q-,r-,s-,d-,i-}
const maxn=1 shl 20;zero=ord('0');prim=1 shl 20;
var t:Text;
   V,A,Hash:array[0..maxn]of longword;s:string;
   Count,From:Array[0..prim]of longint;
   unde,n,la,lb,i,pas,lg:longint;last:longword;
   gasit:boolean;
   return:int64;
   procedure init;
   begin
      assign(T,'secv5.in');reset(T);readln(t,n,la,lb);
      for i:=1 to N do
      begin
         readln(t,S);
         for pas:=1 to length(s) do V[i]:=V[i]*10+ord(S[pas])-zero;
      end;close(t);
   end;
{var t1:longint;t2:longint absolute $0:$046c;}
begin
   writeln((sizeof(v)*3+sizeof(count)*2)div 1024);
 {  t1:=t2;}
   init;
{   writeln((t2-t1)/18.2:0:6);}
   for i:=1 to N do inc(From[V[i]-(V[i]div prim)*prim]);Count[0]:=From[0];
   for i:=1 to prim do begin inc(from[i],from[i-1]);count[i]:=From[i];end;
   for pas:=1 to N do
   begin
      unde:=V[pas]-(V[pas]div prim)*prim;gasit:=false;
      for i:=Count[unde]downto From[unde]+1 do if V[Hash[i]]=V[pas] then
      begin A[pas]:=A[Hash[i]];gasit:=true;break;end;
      if not gasit then
      begin inc(lg);A[pas]:=lg;Hash[From[unde]]:=pas;dec(From[unde]);end;
   end;
{   for i:=1 to N do write(V[i],' ');writeln;
   for i:=1 to N do write(A[i],' ');writeln;}
{   writeln((t2-t1)/18.2:0:6);                  }
end.