Cod sursa(job #968642)

Utilizator blasterzMircea Dima blasterz Data 2 iulie 2013 14:22:12
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <cstring>

char a[1000003];
int n;
int cnt[27];

int main() {
    freopen ("ordine.in", "r", stdin);
    freopen ("ordine.out", "w", stdout);
    scanf ("%s", &a);
    n = strlen(a);
    int i, j;
    for (i = 0; i < n; ++i)
        cnt[ a[i] - 'a' ]++;
    
    a[0] = 0;
    for (i = 1; i <= n; ++i) {

        for (j = 0; j < 26; ++j)
            if (cnt[j] == (n - i + 1) / 2 + 1 && (j + 'a' != a[i - 1]))
                break;
        if (j < 26 && cnt[j] == (n - i + 1) / 2 + 1) {
            cnt[j]--;
            a[i] = j + 'a';
        }
        else {
            for (j = 0; j < 26; ++j)
                if (cnt[j] && (j + 'a') != a[i - 1])
                    break;
            if (j < 26 && cnt[j])
                cnt[j]--,
                a[i] = j + 'a';
        }
    }
    printf ("%s\n", a + 1);
}