Cod sursa(job #1204542)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 3 iulie 2014 11:39:19
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

#define NMAX 1000007

using namespace std;

char a[NMAX];
int Ap[NMAX];
int ok;

int main(){
    freopen("ordine.in", "r", stdin);
    freopen("ordine.out", "w", stdout);
    gets(a);
    int n = strlen(a) - 1;
    for(int i = 0; i <= n; ++i)
        ++Ap[a[i] - 'a'];
    while(1){
        int poz = 0, poz2 = 0;
        for(int i = 0; i <= 'z' - 'a'; ++i)
            if(Ap[i] != 0){
                poz = i;
                break;
            }
        for(int i = poz + 1; i <= 'z' - 'a'; ++i)
            if(Ap[i] != 0){
                poz2 = i;
                break;
            }
        if(poz2 == 0){
            for(int i = 1; i <= Ap[poz]; ++i)
                printf("%c", poz + 'a');
            return 0;
        }
        int Min = min(Ap[poz], Ap[poz2]);
        Ap[poz] -= Min;
        Ap[poz2] -= Min;
        for(int i = 1; i <= Min; ++i)
            if(ok == 0)
                printf("%c%c", poz + 'a', poz2 + 'a');
            else
                printf("%c%c", poz2 + 'a', poz + 'a');
        if(ok == 0)
            if(Ap[poz2] != 0)
                ok = 1;
            else
                ok = 0;
        else
            if(Ap[poz] != 0)
                ok = 1;
            else
                ok = 0;
    }
}
/// acdegeilimininorortrtu