Cod sursa(job #1104996)
Utilizator | 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;
}