Cod sursa(job #1416542)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 8 aprilie 2015 12:49:04
Problema Ordine Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.98 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;
}