Cod sursa(job #763732)

Utilizator andrei_toaderToader Andrei Sorin andrei_toader Data 2 iulie 2012 23:06:39
Problema Restante Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.43 kb
program restante;
var f,g:text;
    v:array of string[16];
    n,i:longint;
    bufin:array[1..65000] of byte;
    nr:longint;

procedure sort1 (st,dr:byte);
var ma:integer;
    aux:char;
    a,b:byte;

begin
 a:=st; b:=dr;
 repeat
  while v[i][a]<v[i][b] do
   dec(b);
  aux:=v[i][a]; v[i][a]:=v[i][b]; v[i][b]:=aux; inc(a);
  ma:=1;
  if a<b then
  begin
   while v[i][a]<v[i][b] do
    inc(a);
   aux:=v[i][a]; v[i][a]:=v[i][b]; v[i][b]:=aux; ma:=0; dec(b);
  end;
 until b<=a;
 if st<a-ma then sort1 (st,a-ma);
 if dr>a-ma+1 then
  sort1 (a-ma+1,dr);
end;


procedure sort2 (st,dr:longint);
var ma:integer;
    aux:string[16];
    a,b:longint;

begin
 a:=st; b:=dr;
 repeat
  while v[a]<v[b] do
   dec (b);
  aux:=v[a]; v[a]:=v[b]; v[b]:=aux; inc(a); ma:=1;
 if a<b then
 begin
  while v[a]<v[b] do
   inc(a);
  aux:=v[a]; v[a]:=v[b]; v[b]:=aux; ma:=0; dec(b);
 end;
 until b<=a;
 if st<a-ma then
  sort2 (st,a-ma);
 if dr>a-ma+1 then
  sort2 (a-ma+1,dr);
end;

begin
 assign (f,'restante.in'); reset (f);
 assign (g,'restante.out'); rewrite (g);
 settextbuf (f,bufin);
 readln (f,n);
 setlength (v,n+1);
 for i:=1 to n do
  readln (f,v[i]);
 for i:=1 to n do
  sort1 (1,length (v[i]));
 sort2 (1,n);
 for i:=2 to n-1 do
  if (v[i]<>v[i-1]) and (v[i]<>v[i+1]) then
   inc(nr);
  if v[n]<>v[n-1]  then
   inc(nr);
  if v[1]<>v[2] then
   inc(nr);
  write (g,nr);
 close (F); close (g);
end.