Cod sursa(job #2019455)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 7 septembrie 2017 19:55:54
Problema Ordine Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int NMAX = 1005;
char s[NMAX];
char sol[NMAX];
int vf[35];

int main()
{
    freopen("ordine.in", "r", stdin);
    freopen("ordine.out", "w", stdout);
    scanf("%s", &*s);
    for(int i = 0;s[i]; ++i) {
        ++vf[s[i] - 'a'];
    }
    int last = 30, val = 'z' - 'a';
    int n = strlen(s);
    for(int i = 0;i < n; ++i) {
        bool ok = false;
        int lim = n - i, j;
        for(j = 0;j <= val && ok == false;) {
            if(vf[j] == lim / 2 + 1 && last != j) {
                ok = true;
            }
            else {
                ++j;
            }
        }
        if(ok == false) {
            j = 0;
            while(j <= val && ok == false) {
                if(last != j && vf[j] != 0) {
                    ok = true;
                }
                else {
                    ++j;
                }
            }
        }
        sol[i] = j + 'a';
        --vf[j];
        last = j;
    }
    printf("%s\n", sol);
    return 0;
}