Cod sursa(job #755473)

Utilizator vendettaSalajan Razvan vendetta Data 5 iunie 2012 21:13:12
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("ordine.in");
ofstream g("ordine.out");

string s;
int ap[200];
char rez[1000005];

void citeste(){

    f >> s;
    for(int i=0; i<s.size(); i++) ++ap[s[i]];

}

void rezolva(){

    for(int i='a'; i<='z'; i++){
        if (ap[i] == 0) continue;
        if (ap[i] == 1) {
            --ap[i];
            char c = i;
            rez[++rez[0]] = c;
            continue;
        }
        for(int j=1; j<=ap[i]; j++){
            char c = i;
            rez[++rez[0]] = c;
            for(int k='a'; k<='z'; k++){
                if (k == i) continue;
                if (ap[k] == 0) continue;
                char cc = k;
                rez[++rez[0]] = cc;
                --ap[k];
                break;
            }
        }
        ap[i] = 0;
    }

    for(int i=2; i<=rez[0];){
        if (rez[i]!= rez[i-1]){
            i++;
            continue;
        }
        for(int j=i-2; rez[i]==rez[i-1]; i++,j--){
            swap(rez[i-1],rez[j]);
        }
    }

    for(int i=1; i<=rez[0]; i++) g << rez[i];

}

int main(){

    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;

}