Cod sursa(job #992992)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 2 septembrie 2013 23:06:57
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <list>

using namespace std;


int L[30];

string a;
string b;

int sum;

int valid()
{
    for ( int i = 1; i <= 26; ++i )
            if ( L[i] )
            {
                if ( L[i] > sum/2 )
                        return i;
            }

    return -1;
}

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

    f >> a;

    sum = a.length();

    for ( int i = 0; i < sum; ++i )
            L[ a[i] - 96 ]++;

    while( sum )
    {
        int elem = valid();

        if ( elem == -1 )
        {
            for ( int i = 1; i <= 26; ++i )
                    if ( L[i] )
                    {
                        b.push_back( char( 96 + i ) );
                        L[i]--;
                        sum--;
                    }
        }
        else
        {
            b.push_back( char( 96 + elem ) );
            L[elem]--;
            sum--;
        }
    }

    g << b << "\n";

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

    return 0;
}