Cod sursa(job #780108)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 19 august 2012 22:08:40
Problema Ordine Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <cstring>

#define MAX 1000005
#define NMAX 26

using namespace std;

char sir[MAX];
int v[NMAX], lgt, added, sw, f, s;

int getNext()
{
    int index = 0;
    for(int i = max(f + 1, s); i < NMAX; i++)
    {
        if(lgt - added && lgt - added - v[i] < v[i])
        {
            s = i;
            return 1;
        }
        if(!index && v[i]) index = i;
    }
    s = index;
    return 0;
}

int main()
{
    ifstream in("ordine.in");
    in.getline(sir, MAX);
    in.close();
    lgt = strlen(sir);
    for(int i = 0; i < lgt; i++) v[sir[i] - 'a']++;
    ofstream out("ordine.out");
    for(f = 0, s = 1; f < NMAX; f++)
    {
        if(!v[f]) continue;
        if(f == s || (getNext()))
        {
            getNext();
            out<<(char)('a' + s);
            added++;
            v[s]--;
        }
        while(v[f])
        {

            out<<(char)('a' + f); added++; v[f]--;
            getNext();
            if(s)
            {
                out<<(char)('a' + s);
                v[s]--;
                added++;
            }

        }
    }
    out.close();
    return 0;
}