Cod sursa(job #102936)

Utilizator astronomyAirinei Adrian astronomy Data 14 noiembrie 2007 20:00:02
Problema Ordine Scor Ascuns
Compilator c Status done
Runda Marime 1.19 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, ind;

    //fgets(sir+1, MAXN, stdin); 
scanf("%s\n", sir+1); N = strlen(sir+1);

    if(sir[N] == '\n') N--;
    
    for(i = 1; i <= N; i++) cnt[sir[i]-'a']++;
    
    for(i = 1; i <= N; i++)
    {
        for(j = 0; j < 26; j++) if(cnt[j] && sol[i-1] != 'a'+j) break;
        if(j == 26)
        {
            for(k = 0; k < 26; k++) if(cnt[k]) break ;
            for(ind = N, j = i-1; j >= 0; j--)
             if(cnt[k])
             {
                if(sol[j] != 'a'+k && sol[j+1] != 'a'+k)
                    cnt[k]--, sol2[ind--] = 'a'+k, sol2[ind--] = sol[j];
                else
                    sol2[ind--] = sol[j];
             }
             else
                sol2[ind--] = sol[j];
            printf("%s\n", sol2+1), exit(0);
        }
        sol[i] = 'a'+j, cnt[j]--;
    }

    //puts(sol+1);
printf("%s\n", sol+1);


    return 0;
}