Cod sursa(job #2850065)

Utilizator CosminDMRCosmin Damureanu CosminDMR Data 16 februarie 2022 11:01:07
Problema Ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
using namespace std;
char v[1000005], ch;
int fr[256], n, i, j;
bool ok;
int main()
{
    ifstream in("ordine.in");
    ofstream out("ordine.out");
    while (in >> ch){
        fr[ch]++;
        n++;
    }
    v[0] = '+';
    for (i = 1; i <= n; i++){
         /// determin litera a carei aparitii este mai mare ///
        ///  decat nr de pozitii ce trebuie completat / 2  ///
        ok = false;
        for (j = 'a'; j <= 'z'; j++){
            if (fr[j] > (n - i + 1) / 2 && j != v[i - 1]){
                ch = j;
                ok = true;
                break;
            }
        }
        if (ok){
            v[i] = ch;
            fr[ch]--;
        }
        else /// trb sa pun cel mai mic caracter != v[i - 1] ///
            for (j = 'a'; j <= 'z'; j++)
            {
                if (fr[j] && j != v[i - 1])
                {
                    v[i] = j;
                    fr[j]--;
                    break;
                }
            }
    }
    for (i = 1; i <= n; i++)
        out << v[i];
    return 0;
}