Cod sursa(job #186978)

Utilizator Mishu91Andrei Misarca Mishu91 Data 29 aprilie 2008 16:26:54
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstring>
#define MAX_N 1000002

int A[30];
char S[MAX_N];

void solve()
{
    int N = strlen(S),i,last = 45;
    for(i=0; i<N; i++)
        A[S[i] - 'a']++;
    for(i=0; i<N; i++)
    {
        bool ok = false;
        for(int j=0; j<='z'-'a'; j++)
            if(A[j] == (N - i)/2 + 1 && j != last && A[j])
            {
                printf("%c",j+'a');
                A[last = j]--;
                ok = true;
                break;
            }
        if(ok) continue;
        for(int j=0; j<='z'-'a'; j++)
            if(A[j] && j!=last)
            {
                A[last = j]--;
                printf("%c",j+'a');
                break;
            }
    }
}

int main()
{
    freopen("ordine.in","r",stdin);
    freopen("ordine.out","w",stdout);
    gets(S);
    solve();
}