Cod sursa(job #580289)

Utilizator deneoAdrian Craciun deneo Data 12 aprilie 2011 22:14:21
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream>
#include<cstring>
using namespace std;

char c[1000001];
int n, v[100], nv = 0, p1 = 0, p2 = 0;

int main() {
    int i, a;
    ifstream f("ordine.in");
    ofstream g("ordine.out");
    f.getline(c + 1, 1000001);
    n = strlen(c + 1);
    for(i = 1; i <= n; ++i) {
        ++v[a = (int)c[i] - 'a' + 1];
        if(nv < a)
            nv = a;
    }
    while(1) {
        if(v[p1]) {
            g << (char)(p1 + 'a' + 1);
            --v[p1];
        }
        else {
            for(i = p1 + 1; i <= nv; ++i)
                if(v[i] && i != p2) {
                    p1 = i;
					break;
				}
			if(i > nv)
                break;
            g << (char)(p1 + 'a' - 1);
			--v[p1];
        }
        if(v[p2]) {
            g << (char)(p2 + 'a' - 1);
            --v[p2];
        }
        else {
            for(i = p2 + 1; i <= nv; ++i)
                if(v[i] && i != p1) {
                    p2 = i;
					break;
				}
			if(i > nv)
                break;
            g << (char)(p2 + 'a' - 1);
			--v[p2];
        }
    }
    g << '\n';
    g.close();
    return 0;
}