Cod sursa(job #461243)

Utilizator SpiderManSimoiu Robert SpiderMan Data 5 iunie 2010 23:50:25
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#include <string>

const char FIN[] = "ordine.in", FOU[] = "ordine.out";
const int MAX_N = 1000005;

char a[MAX_N];

int s[27];

int main()
{
    freopen (FIN , "r" , stdin);
    freopen (FOU , "w" , stdout);

    fgets ( a , MAX_N , stdin ) ;

    int N = strlen ( a ) ;

    for (int i = 0 ; i < N; ++i)
        ++s[a[i] - 'a'];

    for ( ; a[N - 1] == '\n'; --N) ;

    char r = 0;

    for (int i = 0; i < N; ++i)
    {
       int k = 0;

       for (int j = 'a' ; j <= 'z'; ++j)
        if ( s[j - 'a'] && !k && j != r )
            --s[j - 'a'], k = j;
        else
            if ( s[j - 'a'] == ( ( N - i ) >> 1 ) + 1 )
                ++s[k - 'a'], --s[j - 'a'], k = j, j = 'z' + 1;

        r = k;

        printf("%c", k);
    }

    return 0;
}