Cod sursa(job #126227)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 21 ianuarie 2008 18:30:20
Problema Restante Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.45 kb
Program restante;
Var f,ff:text;
    n,q,i,l:longint;
    a,aa:array[0..40000] of string[17];
procedure merge(st,dr:longint);
var m,i,j,k,l:longint;
    aa:string;
begin
 if st<dr then
   begin
    m:=(st+dr) div 2;
    merge(st,m);
    merge(m+1,dr);
    i:=st;
    j:=m+1;
    l:=0;
    aa:='';
    while(i<=m)and(j<=dr) do
         if a[q,i]>a[q,j] then begin aa:=aa+a[q,j]; inc(j); end
      	                  else begin aa:=aa+a[q,i]; inc(i); end;
    for k:=i to m do aa:=aa+a[q,k];
    for k:=j to dr do aa:=aa+a[q,k];
    for k:=st to dr do a[q,k]:=aa[k-st+1];
   end;
end;
procedure merge1(st,dr:longint);
var m,i,j,k,l:longint;
begin
 if st<dr then
   begin
    m:=(st+dr) div 2;
    merge1(st,m);
    merge1(m+1,dr);
    i:=st;
    j:=m+1;
    l:=0;
    while(i<=m)and(j<=dr) do
         if a[i]>a[j] then begin inc(l); aa[l]:=a[j]; inc(j); end
      	              else begin inc(l); aa[l]:=a[i]; inc(i); end;
    for k:=i to m do begin inc(l); aa[l]:=a[k]; end;
    for k:=j to dr do begin inc(l);  aa[l]:=a[k]; end;
    for k:=st to dr do a[k]:=aa[k-st+1];
   end;
end;
Begin
  assign(f,'restante.in');
  reset(f);
  assign(ff,'restante.out');
  rewrite(ff);
  readln(f,n);
  for q:=1 to n do
     begin
      readln(f,a[q]);
      merge(1,length(a[q]));
     end;
  merge1(1,n);
  l:=n;
  for i:=1 to n do
     if (a[i]=a[i+1])or(a[i]=a[i-1]) then dec(l);
  Writeln(ff,l);
  close(f);
  close(ff);
End.