Cod sursa(job #125174)

Utilizator 7RaduRadu Antohi 7Radu Data 20 ianuarie 2008 11:51:52
Problema Restante Scor 50
Compilator fpc Status done
Runda preONI 2008, Runda 3, Clasa a 9-a Marime 1.53 kb
program Restante;
const
   abc : string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var
   Fl : text;
   a : array[0..36000] of string[16];
   r : array[1..36000] of integer;
   k : array[0..36000] of byte;
   n, i, j, l, p, nr : longint;
   s1 : char;
   s : longint;

procedure Quick_Sort(inc, sfr : integer);
var
   i, j, x : integer;
   y : char;
begin
   i := inc;
   j := sfr;
   x := pos(a[l][(inc+sfr) div 2],abc);

   repeat
     while pos(a[l][i],abc) < x do
        i := i+1;
     while pos(a[l][j],abc) > x do
        j := j-1;
     if i <= j then
        begin
           y := a[l][i];
           a[l][i] := a[l][j];
           a[l][j] := y;
           i := i + 1;
           j := j - 1;
        end;
   until i>j;

   if inc < j then
      Quick_Sort(inc,j);
   if sfr > i then
      Quick_Sort(i,sfr);
end;

begin
   assign(fl,'restante.in');
   reset(fl);
   readln(fl,n);
   nr := 0;
   for l := 1 to n do
      begin
         readln(fl,a[l]);
         quick_sort(1,length(a[l]));
         k[l] := 0;

         for p := 1 to nr do
            if a[r[p]] = a[l] then
               begin
                  k[r[p]] := 1;
                  k[l] := 1;
               end;
        if k[l] = 0 then
           begin
              nr := nr+1;
              r[nr] := l;
           end;
      end;
   close(fl);

   s := 0;
   for i := 1 to n do
      if k[i] = 0 then
      s := s + 1;

   assign(fl,'restante.out');
   rewrite(fl);
   writeln(fl,s);
   close(fl);
end.