Pagini recente » Cod sursa (job #2629790) | Cod sursa (job #2594279) | Cod sursa (job #2892547) | Cod sursa (job #2656065) | Cod sursa (job #109605)
Cod sursa(job #109605)
#include <stdio.h>
#include <string.h>
char x [1000001];
long n, f [30];
void frecventa ()
{
long i;
for (i=0;i<n;i++)
f [x [i]-'a']++;
}
void ordine ()
{
char y [1000001];
int i, j, ok=1;
long p1, p=-1;
y[0]=0;
while (n > 0 && ok)
{
i=-1;
while ((f [++i] == 0 || i+'a' == y [p]) && i <= 'z'-'a'+1);
if (i+'a' <= 'z')
{
n--;
f [i]--;
y [++p]=i+'a';
} else ok=0;
}
if (ok == 0)
{
for (i=0; i<=26; i++)
for (j=1; j<=f [i]; j++)
y [++p]=i+'a';
y [++p]=0;
p1=p-1;
while (y [p-1] == y [p-2])
{
//p1=p-1;
while (y [--p1] == y [p-1]);
p1--;
for (i=p; i>=p1; i--)
y [i+1]=y [i];
y [p1+1]=y [p];
}
y [p]=0;
}
y [++p]=0;
printf ("%s", y);
}
int main ()
{
freopen ("ordine.in", "r", stdin);
freopen ("ordine.out", "w", stdout);
gets (x);
n=strlen (x);
frecventa ();
ordine ();
fcloseall ();
return 0;
}