Cod sursa(job #106698)

Utilizator astronomyAirinei Adrian astronomy Data 18 noiembrie 2007 21:34:54
Problema Ordine Scor Ascuns
Compilator c Status done
Runda Marime 0.81 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXN (1 << 20)

int N, cnt[32];
char sir[MAXN];
char sol[MAXN], sol2[MAXN];

int main(void)
{
    freopen("ordine.in", "rt", stdin);
    freopen("ordine.out", "wt", stdout);

    int i, j, k, p, left, ind;

    fgets(sir+1, MAXN, stdin); N = strlen(sir+1);

    if(sir[N] == '\n') N--;
    
    for(i = 1; i <= N; i++) cnt[sir[i]-'a']++;

    for(left = N, i = 1; i <= N; i++)
    {
        for(k = j = 0; j < 26; j++)
         if(cnt[j] > cnt[k]) k = j;
        if(cnt[k] == left/2+1)
            p = k;
        else
            for(j = 0; j < 26; j++)
             if('a'+j != sir[i-1] && cnt[j] > 0) { p = j; break; }
        sir[i] = 'a'+p, cnt[p]--, left--;
    }

    puts(sir+1);

    return 0;
}