Cod sursa(job #1623389)

Utilizator woogiefanBogdan Stanciu woogiefan Data 1 martie 2016 19:13:24
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("ordine.in");
ofstream fout("ordine.out");



int fr[28];
char s[1000005];

inline bool Ok(int n)
{
    bool ok = 1;
    for(int i = 0 ; i < 26 ; i++)
        if(fr[i] > (n + 1) / 2)
            ok = 0;
    return ok;
}
int main()
{
    fin >>(s + 1);
    int n = strlen(s + 1);
    for(int i = 1 ; i <= n ; i++)
        fr[s[i]- 'a']++;
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 0 ; j < 26 ; j++)
        {
            bool ok = 1;
            if(fr[j] > 0 && s[i-1] != j + 'a')
            {
                fr[j]--;
                if(Ok(n - i))
                {
                    s[i] = j + 'a';
                    break;
                }
                fr[j]++;
            }

        }
    }
    fout << (s + 1) << "\n";
    return 0;
}