Cod sursa(job #126431)

Utilizator juniorOvidiu Rosca junior Data 22 ianuarie 2008 03:47:05
Problema Restante Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.61 kb
const
	lim = 36000;
var
	fi, fo : text;
  n, i, j, originale : longint;
  cuv : string[16];
  c : array[0..lim+1] of string[16];
  mc : array[#96..'z',1..lim] of string[16];
  nc, f : array[#96..'z'] of integer;
  car : char;
  l : byte;
begin
	assign(fi,'restante.in'); reset(fi);
  assign(fo,'restante.out'); rewrite(fo);
  readln(fi,n);
  for i := 1 to n do
  	begin
    	readln(fi,cuv);
      l := length(cuv);
      for car := 'a' to 'z' do
      	f[car] := 0;     { frecventele literelor din cuvantul curent }
      for j := 1 to l do
      	inc(f[cuv[j]]);    { Stabilim frecventele literelor din cuvant. }
      for car := 'a' to 'z' do  { Ordonam literele in cuvant. }
      	for j := 1 to f[car] do
        	c[i] := c[i]+car;
      for j := length(c[i])+1 to 16 do { Completam cu #96. }
      	c[i] := #96+c[i]; { caracterul mai mic decat 'a' }
    end;
  for l := 16 downto 1 do { Grupam dupa locul l. }
  	begin
    	for car := #96 to 'z' do
      	nc[car] := 0; { numarul de cuvinte corespunzatoare fiecarui caracter }
    	for i := 1 to n do
      	begin
      		inc(nc[c[i][l]]);{Creste numarul de cuvinte corespunzator literei l. }
          mc[c[i][l],nc[c[i][l]]] := c[i];
        end;
      i := 0;
      for car := #96 to 'z' do { Culegem cuvintele in vectorul c. }
      	for j := 1 to nc[car] do
        	begin
          	inc(i); c[i] := mc[car,j]
          end;
  	end;
  c[0] := ' '; c[n+1] := ' '; { diferite de celelalte }
  for i := 1 to n do
  	if (c[i-1] <> c[i]) and (c[i] <> c[i+1]) then
    	inc(originale);
  writeln(fo,originale);
  close(fi); close(fo);
end.