Cod sursa(job #116325)

Utilizator raduzerRadu Zernoveanu raduzer Data 18 decembrie 2007 14:13:12
Problema Ordine Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#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;
}