Cod sursa(job #1424795)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 25 aprilie 2015 15:31:53
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#define MAXN 1000000
#define BAZA 26
char s[MAXN+3];
int fr[BAZA];
int main()
{
    int n, i, max, min, cif, last;
    FILE *fin, *fout;
    fin=fopen( "ordine.in", "r" );
    fout=fopen( "ordine.out", "w" );
    fgets(s, MAXN+2, fin);
    n=0;
    while(s[n]!='\n')
    {
        fr[s[n]-'a']++;
        n++;
    }
    last=BAZA;
    for( i=0; i<n; i++ )
    {
        min=max=cif=BAZA-1;
        while( cif>0 )
        {
            cif--;
            if( cif!=last )
            {
                if( fr[cif]!=0 )
                {
                    min=cif;
                }
                if( fr[cif]>fr[max] )
                {
                    max=cif;
                }
            }
        }
        if( (max==min) || ((n-i)/2>=fr[max]) )
        {
            fr[min]--;
            fputc(min+'a', fout);
            last=min;
        }
        else
        {
            fr[max]--;
            fputc(max+'a', fout);
            last=max;
        }
    }
    fputc('\n', fout);
    fclose(fin);
    fclose(fout);
    return 0;
}