Cod sursa(job #124867)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 20 ianuarie 2008 09:33:53
Problema Restante Scor 80
Compilator fpc Status done
Runda preONI 2008, Runda 3, Clasele 5-8 Marime 2.16 kb
program restante;
var f,g:text;
        v:array[0..36001] of string;
        n,dim:longint;

procedure prel(var s:string);
var i,j:longint;
        aux:char;
begin
        for i:=1 to length(s)-1 do
                for j:=i+1 to length(s) do
                        if s[i]>s[j] then
                                begin
                                        aux:=s[i];
                                        s[i]:=s[j];
                                        s[j]:=aux;
                                end;
end;


procedure iofile;
var i:longint;
begin
        assign(f,'restante.in');reset(f);
        assign(g,'restante.out');rewrite(g);
        readln(f,n);dim:=n;
        for i:=1 to n do
                begin
                        readln(f,v[i]);
                        prel(v[i]);
                end;
        v[0]:='';
        v[n+1]:='';
end;



procedure repair(i:longint);
var l,r,max:longint;
        aux:longint;
        aux1:string;
begin
        l:=i*2;
        r:=l+1;
        max:=i;
        if (l<=dim)and(v[l]>v[max]) then max:=l;
        if (r<=dim)and(v[r]>v[max]) then max:=r;
        if max<>i then
                begin
                        aux1:=v[i];
                        v[i]:=v[max];
                        v[max]:=aux1;
                        repair(max);
                end;
end;


procedure build_heap;
var i:longint;
begin
        for i:= n div 2 downto 1 do
                repair(i);
end;


procedure heapsort;
var i:longint;
        aux:string;
begin
        build_heap;
        for i:=n downto 2 do
                begin
                        aux:=v[1];
                        v[1]:=v[i];
                        v[i]:=aux;
                        dec(dim);
                        repair(1);
                end;
end;



procedure count;
var i:longint;
        nrf,nrog:longint;
begin
        nrf:=0;
        nrog:=0;
        for i:=1 to n do
                if (v[i]=v[i-1])or(v[i]=v[i+1]) then
                        inc(nrf) else inc(nrog);
        writeln(g,nrog);
        close(g);
end;



begin
        iofile;
        heapsort;
        count;
end.