Cod sursa(job #1104987)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 11 februarie 2014 12:02:17
Problema Ordine Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
int v[30];
int main()
{
    FILE *fin,*fout;
    fin=fopen("ordine.in","r");
    fout=fopen("ordine.out","w");
    char ch=fgetc(fin);
    int l=1;
    while(ch!='\n'&&ch!=EOF)
    {
        v[ch-'a']++;
        ch=fgetc(fin);
        l++;
    }
    l--;
    char cprev='1';
    int i,l2=1;
    for(i=0; i<26; i++)
    {
        int j=i+1,Poz=-1;
        while(j<26&&Poz==-1)
        {
            if(v[j]>=(l-l2+1)/2+1)
                Poz=j;
            j++;
        }
        if(Poz!=-1)
        {
            fprintf(fout,"%c",'a'+Poz);
            cprev='a'+Poz;
            l2++;
            v[Poz]--;
        }
        while(v[i]!=0)
        {
            v[i]--;
            if(cprev=='a'+i)
            {
                int j=i+1,Poz=-1;
                while(j<26&&Poz==-1)
                {
                    if(v[j]>=(l-l2+1)/2+1)
                        Poz=j;
                    j++;
                }
                j=i+1;
                while(j<26&&v[j]==0)
                    j++;
                if(j<26&&Poz==-1)
                {
                    v[j]--;
                    fprintf(fout,"%c",'a'+j);
                    cprev='a'+j;
                    l2++;
                }
                else
                {
                    v[Poz]--;
                    fprintf(fout,"%c",'a'+Poz);
                    cprev='a'+Poz;
                    l2++;
                }
            }
            fprintf(fout,"%c",'a'+i);
            cprev='a'+i;
            l2++;
        }
    }
    return 0;
}