Cod sursa(job #1606203)

Utilizator ciocan_catalinCiocan Catalin - Iulian ciocan_catalin Data 20 februarie 2016 00:25:35
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("ordine.in");
ofstream fout("ordine.out");
int n,fr[1005];
char s[1000155],v[1000155];

void Solve(int last)
{
    int i;
    bool ok = false;
    for(i = 0; i < 26; i++)
    {
        if(v[last-1]!= ((char)(i+97))&& fr[i] > n/2)
        {
            fr[i]--;
            v[last] = (char)(i+97);
            ok = true;
            break;
        }
    }
    if(!ok)
    {
        for(i = 0 ; i < 26; i++)
        {
            if(v[last-1]!= ((char)(i+97)) && fr[i]>0)
            {
                v[last] = (char)(i+97);
                fr[i]--;
                ok = true;
                break;
            }
        }
    }
    n--;
    if(n>0 && ok) Solve(last+1);
}
int main()
{
    int i,j;
    fin>>(s+1);
    n = strlen(s+1);
    for(i = 1; i <= n; i++)
        fr[s[i]-'a']++;
    Solve(1);
    fout<<(v+1)<<"\n";
    fout.close();
    return 0;
}