Cod sursa(job #2848444)

Utilizator Mihai_UngureanuUngureanu Mihai Calin Mihai_Ungureanu Data 12 februarie 2022 16:28:32
Problema Ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;


int vf[30];
char v[1000001];
int main(void){
    ofstream cout("ordine.out");
    ifstream cin("ordine.in");
    char c;
    int n = 0;
    while(cin >> c){
        n++;
        vf[c-'a']++;
    }
    v[0] = '+';
    for(int i = 1;i<=n;i++){
        bool ok = 0;
        //determin daca exista un caracter a carui frcventa este mai mare decat numarul de caractere care trebuie afisate / 2;
        for(int j = 0;j<=26;j++){
            if(vf[j] > (n-i+1)/2 && 'a'+ j != v[i-1]){
                v[i] = (char)'a'+j;
                ok = 1;
                vf[j]--;
                break;
            }

        }
        if(!ok){
            for(int j = 0;j<=26;j++){
                if(vf[j] != 0 && 'a'+ j != v[i-1]){
                    v[i] = j+'a';
                    vf[j]--;
                    break;
                }
            }
        }
    }
    for(int i = 1;i<=n;i++){
        cout << v[i];
    }
}