Cod sursa(job #290428)
Utilizator | Data | 27 martie 2009 22:30:03 | |
---|---|---|---|
Problema | Ordine | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 4.11 kb |
var f,g:text;
suma:longint;
z,c,i,j,q,w:char;
a:array['a'..'z']of longint;
b:array[1..30]of boolean;
begin
assign(f,'ordine.in');reset(f);
assign(g,'ordine.out');rewrite(g);
while not eof(f)do
begin
read(f,c);
a[c]:=a[c]+1;
if c>q then begin
w:=q;
q:=c;
end
else if (c<>q)and(c>w) then w:=c;
end;
for i:='a'to'z'do
begin
suma:=0;
for z:='a' to 'z' do
if z>i then suma:=suma+a[z];
if (a[i]>suma div 2+1) then begin
while a[i]>0 do
begin
write(g,i);
a[i]:=a[i]-1;
for j:='a' to'z'do
if (a[j]>0)and(i<>j) then begin
write(g,j);
a[j]:=a[j]-1;
if (a[i]=0)and(a[j]<>0)then b[ord(j)-ord('a')]:=true;
break;
end;
end;
end
else if (i=w)and(a[i]<=a[q] div 2) then begin
while a[i]>0 do
begin
{write(g,i);
a[i]:=a[i]-1;
}for j:='a' to'z'do
if (a[j]>0)and(i<>j) then begin
write(g,j);
a[j]:=a[j]-1;
if (a[i]=0)and(a[j]<>0)then b[ord(j)-ord('a')]:=true;
break;
end;
write(g,i);
a[i]:=a[i]-1;
end;
end else
if (a[i]=1)and(b[ord(i)-ord('a')]=false) then begin
write(g,i);
a[i]:=0;
end
else if (b[ord(i)-ord('a')]=true)then begin
b[ord(i)-ord('a')]:=false;
for j:='a' to'z' do
if (i<>j)and(a[j]<>0)then begin
write(g,j);
a[j]:=a[j]-1;
break;
end;
while a[i]>0 do
begin
write(g,i);
a[i]:=a[i]-1;
for j:='a' to'z'do
if (a[j]>0)and(i<>j) then begin
write(g,j);
a[j]:=a[j]-1;
if (a[i]=0)and(a[j]<>0)then b[ord(j)-ord('a')]:=true;
break;
end;
end;
end
else if a[i]>1 then begin
while a[i]>0 do
begin
write(g,i);
a[i]:=a[i]-1;
for j:='a' to'z'do
if (a[j]>0)and(i<>j) then begin
write(g,j);
a[j]:=a[j]-1;
if (a[i]=0)and(a[j]<>0)then b[ord(j)-ord('a')]:=true;
break;
end;
end;
end;
end;
close(g);
end.