Pagini recente » Cod sursa (job #2607956) | Cod sursa (job #2562967) | Cod sursa (job #2916627) | Cod sursa (job #83545) | Cod sursa (job #109942)
Cod sursa(job #109942)
#include <stdio.h>
#include <string.h>
int sum,i,j,k,up,m,max,s;
char c[1000001],f[1000001];
int nr[27];
int main()
{
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
scanf("%s",&c);
for (i=0; i<=strlen(c); i++)
nr[c[i]-96]++;
m=0;
for (i=1; i<=1000000; i++)
f[i]=' ';
for (i=1; i<=nr[1]; i++)
{
m++;
f[m]='a';
}
sum=nr[1];
up=0;
for (i=1; i<=26; i++)
if (nr[i]!=0) up=i;
for (i=2; i<=26; i++)
if (nr[i]!=0)
{
s=0;max=0;
for (j=i; j<=26; j++)
if (nr[j]>max)
{
max=nr[j];
s=j;
}
for (j=i; j<=26; j++)
if (j!=s) max=max-nr[j];
if (sum>=max)
{
for (j=1; j<=m-1; j++)
if (f[j]==f[j+1])
{
s=j;
break;
}
int aa=m-s;
for (j=s+1; j<=m; j++)
{
f[j+aa]=f[j];
f[j]=' ';
aa--;
}
m+=nr[i];
for (j=1; j<=m; j++)
if (f[j]==' ') f[j]=char(i+96);
}
else
{
if (i!=up)
{
for (j=m+1; j<=nr[i]+m; j++)
f[j]=char(i+96);
m+=nr[i];
}
else
{
int aa=m+1;
for (j=m; j>=1; j--)
{
aa--;
f[j+aa]=f[j];
f[j]=' ';
}
m+=m+1;
for (j=1; j<=m; j++)
if (f[j]==' ') f[j]=char(i+96);
}
}
sum+=nr[i];
}
for (i=1; i<=m; i++)
printf("%c",f[i]);
printf("\n");
return 0;
}