Cod sursa(job #956555)
Utilizator | Data | 3 iunie 2013 13:03:21 | |
---|---|---|---|
Problema | Ordine | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.58 kb |
#include<cstdio>
#include<cstring>
int i,n,x[27],j,k,l;
char s[1000005],o,t[1000005];
int main()
{freopen("ordine.in","r",stdin),
freopen("ordine.out","w",stdout),
gets(s),n=strlen(s);
for(i=0;i<n;i++)
x[s[i]-'a']++;
for(j=i=0;i<26&&!j;i++)
if(x[i])
j=1,t[0]=i+'a',x[i]--;
for(i=1;i<n;i++)
{for(k=-1,j=0;j<26;j++)
if(2*x[j]>n-i&&t[i-1]!=j+'a')
k=j;
if(k>-1)
t[i]=k+'a',x[k]--;
else
for(j=l=0;l<26&&!j;l++)
if(t[i-1]!=l+'a'&&x[l])
j=1,t[i]=l+'a',x[l]--;}
puts(t);
return 0;}