Pagini recente » Cod sursa (job #1018628) | Cod sursa (job #233379) | Cod sursa (job #1961182) | Cod sursa (job #2213980) | Cod sursa (job #126432)
Cod sursa(job #126432)
{ 90 p }
{ Iese din timp la un test. }
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, k : 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. }
fillchar(c[i],16,#96);
k := 16;
for car := 'z' downto 'a' do { Ordonam literele in cuvant. }
for j := 1 to f[car] do
c[i][k] := car;
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.