Cod sursa(job #1606563)

Utilizator radiogard1999Dragoi Andrei radiogard1999 Data 20 februarie 2016 12:50:44
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

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

char a[1000005],b[1000005];
int n,t[28],top;

void Frecv()
{
    int i;
    for(i=0;a[i];i++)
        t[a[i]-'a'+1]++;
}

void MakeB()
{
    int i,poz,j;
    for(i=1;i<=n;i++)
    {
        poz=-1;
        for(j=1;j<=26;j++)
            if(t[j]>((n - i + 1)/2+1)) poz=j;
            //else if(poz==-1&&t[j]!=0&&(b[top]-'a'+1)!=j) poz=j;
        if(poz == -1)
            for(j=1;j<=26;j++)
                if((b[top]-'a'+1)!= j && t[j]!=0&&poz==-1) poz = j;
        if(poz!=-1)
        {
            b[++top]=poz+'a'-1;
            t[poz]--;
        }
    }
    fout<<(b+1)<<"\n";
    fout.close();
}

int main()
{
    fin>>a;
    fin.close();
    n=strlen(a);
    Frecv();
    MakeB();

    return 0;
}