Cod sursa(job #2850069)

Utilizator dumbravadianaDiana Olivia Dumbrava dumbravadiana Data 16 februarie 2022 11:05:27
Problema Ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("ordine.in");
ofstream fout ("ordine.out");
int fr[30], n, i, j, ok;
char v[1000001], ch;
int main()
{
    while (fin>>ch)
    {
        fr[ch-'a']++;
        n++;
    }
    /// formez anagrama
    v[0]='+';
    for (i=1; i<=n; i++)
    {
        /// determin litera pentru care numarul de aparitii
        /// este mai mare decat numarul de pozitii ce trebuie
        /// completate/2  : (n-i+1)/2
        ok=0;
        for (j=0; j<='z'-'a'; j++)
        {
            if (fr[j]>(n-i+1)/2 && j+'a'!=v[i-1])
            {
                ch=j+'a';
                ok=1;
                break;
            }
        }
        if(ok==1){
            v[i]=ch;
            fr[ch-'a']--;
        }
        else  /// trebuie sa pun cel mai maic caracter !=v[i-1]
            for (j=0; j<='z'-'a'; j++)
        {
            if (fr[j]!=0 && j+'a'!=v[i-1])
            {
                v[i]=j+'a';
                fr[j]--;
                break;
            }
        }
    }
    for (i=1; i<=n; i++)
        fout<<v[i];
    return 0;
}