Cod sursa(job #1416124)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 7 aprilie 2015 13:49:30
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>

#define INF (1<<30)
#define mod 666013

using namespace std;

int n, i, f[35];
char s[1000005];

void solve(char lst)
{
    int i;
    for(i = 'a'; i <= 'z'; i++)
        if(f[i] >= n / 2 + 1)
            break;
    if(i <= 'z')
    {
        printf("%c", i);
        f[i]--;
        n--;
        solve(i);
        return;
    }
    for(i = 'a'; i <= 'z'; i++)
    {
        if(i == lst) continue;
        if(f[i])
        {
            printf("%c", i);
            f[i]--;
            n--;
            solve(i);
            return;
        }
    }
}

int main()
{
    freopen("ordine.in", "r", stdin);
    freopen("ordine.out", "w", stdout);
    gets(s + 1);
    n = strlen(s + 1);
    for(i = 1; i <= n; i++)
        f[ s[i] ] ++;
    solve(0);
    printf("\n");
    return 0;
}