Cod sursa(job #1961771)

Utilizator raduzxstefanescu radu raduzx Data 11 aprilie 2017 12:38:10
Problema Ordine Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;
ifstream f("ordine.in");
ofstream g("ordine.out");
#define nmax 1000002
char s[nmax],a[nmax];
int cnt[30],lit,i;
int apel()
{
    int m,j;
    m=29;
    for(j=0;j<=lit;j+=1)
        if(j+'a'!=a[i-1] and cnt[j]>cnt[m])
            m=j;
    return m;
}
int main()
{
    int n,l,m,j;
    i=1;
    while(f>>s[i])
    {
        cnt[s[i]-'a']+=1;
        i+=1;
    }
    s[i+1]=0;
    i-=1;
    n=i;
    l=n;
    lit='z'-'a';
    for(i=1;i<=n;)
    {
        m=apel();


        if(cnt[m]>=(l+1)/2)
        {
            cnt[m]-=1;
            a[i]=m+'a';
            i+=1;
            l-=1;
        }
        if(i<=n)
        {j=0;
        while(cnt[j]==0 or j+'a'==a[i-1])
            j+=1;
        a[i]=j+'a';
        cnt[j]-=1;i+=1;l-=1;}
    }
    a[n+1]=0;
    g<<a+1;
    return 0;
}