Cod sursa(job #26290)

Utilizator floringh06Florin Ghesu floringh06 Data 5 martie 2007 13:54:39
Problema Puteri Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.09 kb
{$IFDEF NORMAL}
  {$I-,Q-,R-,S-}
{$ENDIF NORMAL}
{$IFDEF DEBUG}
  {$I+,Q+,R+,S-}
{$ENDIF DEBUG}
{$IFDEF RELEASE}
  {$I-,Q-,R-,S-}
{$ENDIF RELEASE}


type vector=array[1..3] of byte;
     smen=record x,y,z:byte; end;
var fi,fo:text;
    n,i,j:longint;
    m:array[1..100000] of smen;
    a:array[1..100000] of longint;
    s1,s2:vector;
    a1,a2,a3,pp:integer;
    aux:longint;
    rez:qword;
    ok:boolean;
    ind:longint;

 procedure part(st,dr:longint; var stst,stdr,drst,drdr:longint);
   var piv,i,j,aux:longint;
    begin
     piv:=a[(st+dr) div 2];
     i:=st-1;
     j:=dr+1;
     while i<j do
      begin
       repeat inc(i) until a[i]>=piv;
       repeat dec(j) until a[j]<=piv;
       if i<j then
        begin
         aux:=a[i];
         a[i]:=a[j];
         a[j]:=aux;
        end;
      end;
      stst:=st;
      drdr:=dr;
      if i=j then
       begin
        stdr:=j-1;
        drst:=i+1;
       end
      else
       begin
        stdr:=j;
        drst:=i;
       end;
   end;


 procedure qsort(st,dr:longint);
  var stst,stdr,drst,drdr:longint;
   begin
    if st<dr then
     begin
      part(st,dr,stst,stdr,drst,drdr);
      qsort(stst,stdr);
      qsort(drst,drdr);
     end;
   end;


 procedure convert(a1,a2,a3:longint);
   var i,j,p:integer;
           s,k:string[7];
            e:integer;
    begin
     s:='';
     str(a1,k);
     s:=s+k;
     if a2 div 10>=1 then
      begin
       str(a2,k);
       s:=s+k;
      end
     else
      begin
       str(a2,k);
       s:=s+'0';
       s:=s+k;
      end;
     if a3 div 10>=1 then
      begin
       str(a3,k);
       s:=s+k;
      end
     else
      begin
       str(a3,k);
       s:=s+'0';
       s:=s+k;
      end;
     val(s,a[ind],e);
    end;


  function valid(i,j:longint):boolean;
   var p:integer;
    begin
    valid:=true;
    if m[i].x+m[j].x>0 then
     p:=m[i].x+m[j].x;
    if m[i].y+m[j].y>0 then
     if m[i].y+m[j].y<>p then
      begin
       valid:=false;
       exit;
      end
    else p:=m[i].y+m[j].y;
    if m[i].z+m[j].z>0 then
     if m[i].z+m[j].z<>p then
      begin
       valid:=false;
       exit;
      end;
    end;



begin
assign(fi,'puteri.in'); reset(fi);
assign(fo,'puteri.out'); rewrite(fo);
readln(fi,n);
for i:=1 to n do
 begin
  ind:=i;
  read(fi,a1,a2,a3);
  convert(a1,a2,a3);
 end;
{qsort(1,ind);}
aux:=n;
{for i:=1 to n do
 begin
  j:=i;
  if a[i]=a[i+1] then
   while a[j]=a[j+1] do
    begin
     a[j]:=0;
     dec(n);
     inc(j);
    end;
 end;}
j:=1;
for i:=1 to aux  do
 if a[i]<>0 then
  begin
   aux:=a[i];
      pp:=aux mod 100;
   aux:=aux div 100;
   if pp<0 then ok:=false;
   a1:=pp;
   pp:=aux mod 100;
   aux:=aux div 100;
   if pp<0 then ok:=false;
   a2:=pp;
   pp:=aux mod 100;
   aux:=aux div 100;
   if pp<0 then ok:=false;
   a3:=pp;
   m[j].x:=a3;
   m[j].y:=a2;
   m[j].z:=a1;
   inc(j);
  end;

for i:=1 to n do
 for j:=i+1 to n do
  begin
   if valid(i,j) then
    inc(rez);
  end;
writeln(fo,rez);
close(fi);
close(fo);
end.