Cod sursa(job #2676772)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 24 noiembrie 2020 22:49:43
Problema Ordine Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("ordine.in");
ofstream fout("ordine.out");
string s, rez;
int fv[130];

int main() {
    fin >> s;
    for (int i = 0; i < s.size(); ++i)
        ++fv[s[i]];
    for (int i = 'a'; i <= 'z'; ++i) {
        int j = i + 1;
        while (fv[i] > 0) {
            while (j <= 'z' && fv[j] == 0)
                ++j;
            bool adauga = true;
            if (rez[rez.size() - 1] != i)
                rez += i, adauga = false;
            if (j <= 'z')
                rez += j;
            if (adauga)
                rez += i;
            --fv[i], --fv[j];
        }
    }
    char el = rez[rez.size() - 1];
    for (int i = rez.size() - 1, nr = 0; i > 0; --i) {
        if (rez[i] == rez[i - 1]) {
            ++nr;
            rez.erase(i, 1);
        }
        if (nr > 0 && i < rez.size() - 1 && rez[i] != el && rez[i - 1] != el)
            rez.insert(rez.begin() + i, el), --nr, ++i;
    }
    fout << rez;
    return 0;
}