Cod sursa(job #186974)

Utilizator Mishu91Andrei Misarca Mishu91 Data 29 aprilie 2008 15:53:12
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <cstring>

int A[30],V[30];
char S[1000002];

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(V[j] == ((N - i + 1) >> 1) + 1 && A[j])
            {
                printf("%c",j+'a');
                V[last = j]++;
                A[j]--;
                ok = true;
            }
        if(ok) continue;
        for(int j=0; j<='z'-'a'; j++)
            if(A[j] && j!=last)
            {
                A[last = j]--;
                V[j]++;
                printf("%c",j+'a');
                break;
            }
    }
}

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