Pagini recente » Cod sursa (job #2647461) | Cod sursa (job #2567966) | Cod sursa (job #417938) | Cod sursa (job #1996844) | Cod sursa (job #116325)
Cod sursa(job #116325)
#include <stdio.h>
#include <string.h>
int d[30],n,z,q,w;
char a[1000020];
int main()
{
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
fgets(a+1,1000000,stdin);
n=strlen(a+1)-1;
int i,j;
z=0;
w=0;
for (i=1; i<=n; ++i)
++d[a[i]-'a'+1];
for (i=1; i<=26; ++i)
{
if (z>0 && a[z]==i+'a'-1) continue;
q=1;
while (q==1)
{
q=0;
for (j=1; j<=26; ++j)
{
if (d[j]>(n-z)/2)
{
++z;
a[z]=j+'a'-1;
q=1;
w=1;
--d[j];
break;
}
}
if (q==0) break;
}
if (z>0 && a[z]==i+'a'-1) continue;
while (d[i]>0)
{
j=i;
++z;
a[z]=i+'a'-1;
--d[i];
if (w==1) break;
if (d[i]>0 && w==0)
{
++z;
while (1)
{
++j;
if (d[j]>0)
{
a[z]=j+'a'-1;
--d[j];
j=i;
break;
}
}
}
}
}
printf("%s\n",a+1);
return 0;
}