Cod sursa(job #120271)

Utilizator floringh06Florin Ghesu floringh06 Data 4 ianuarie 2008 19:11:23
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define FIN "ordine.in"
#define FOUT "ordine.out"
#define MAX_N 1000005

char c[MAX_N];
int fr[1 << 5];
int N;

    void solve ()
    {
         int i, j;
         char h = ' ';
         for (i = 0; i < N; ++i)
             ++fr[c[i] - 96];
         for (i = 1; i <= N; ++i)
         {
             if ((N - i + 1) & 1)
                for (j = 1; j <= 26; ++j)
                    if (fr[j] == ((N - i + 1)/2 + 1))
                    {
                              --fr[j];
                              h = j + 96;
                              printf ("%c", h);
                              break;
                    }
             for (j = 1; j <= 26; ++j)
                if (fr[j] && j + 96 != h)
                {
                          --fr[j];
                          h = j + 96;
                          printf ("%c", h);
                          break;
                } 
         }
    }

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);
        
        gets (c);
        N = strlen (c);
        
        solve ();
        
        return 0;
    }