Cod sursa(job #1104996)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 11 februarie 2014 12:24:39
Problema Ordine Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.06 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>='a'&&ch<='z')
    {
        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 Poz=-1;
                j=i+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
                {
                    if(Poz!=-1)
                    {
                        v[Poz]--;
                        fprintf(fout,"%c",'a'+Poz);
                        cprev='a'+Poz;
                        l2++;
                    }
                }
            }
            int Poz=-1;
            j=i+1;
            while(j<26&&Poz==-1)
            {
                if(v[j]>=(l-l2+1)/2+1)
                    Poz=j;
                j++;
            }
            if(Poz!=-1)
            {
                v[Poz]--;
                fprintf(fout,"%c",'a'+Poz);
                cprev='a'+Poz;
                l2++;
            }
            fprintf(fout,"%c",'a'+i);
            cprev='a'+i;
            l2++;
        }
    }
    return 0;
}