Cod sursa(job #119041)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 29 decembrie 2007 11:24:37
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <string>

#define maxn 1000010
#define sigma 26

int n;
char a[maxn],sol[maxn];
int c[sigma];

int main()
{
    freopen("ordine.in","r",stdin);
    freopen("ordine.out","w",stdout);
    
    scanf("%s ",a);
    n=strlen(a);
    
    int i,j,found;
    
    for (i=0;i<n;i++) c[a[i]-'a']++;
    
    for (i=0;i<n;i++)
    {
        found=0;
        for (j=0;j<sigma;j++) 
            if (c[j]>(n-i)/2) 
            {
                sol[i]=j+'a';
                found=1;
                break;
            }
            
        if (!found)
            for (j=0;j<sigma;j++)
                if (c[j] && (i==0 || j+'a'!=sol[i-1]))
                {
                    sol[i]=j+'a';
                    break;
                }
        c[sol[i]-'a']--;
    }
    
    printf("%s\n",sol);
    
    return 0;
}