Pagini recente » Diferente pentru runda/pre_oni_gim2015 intre reviziile 16 si 17 | Istoria paginii runda/clasa9a | Istoria paginii utilizator/ratiuelena | Diferente pentru monthly-2012/runda-9/solutii intre reviziile 28 si 24 | Cod sursa (job #112067)
Cod sursa(job #112067)
#include<stdio.h>
#include<string.h>
char cit[1010],a[30],*c,lt;
long int i,j,fr[30],l,r;
int main()
{
FILE *f,*g;f=fopen("ordine.in","r");g=fopen("ordine.out","w");
c=&cit[0];
fscanf(f,"%s",c);
l=strlen(c);
for(i=0;i<26;i++)a[i]=(char)i+'a';
for(i=0;i<l;i++)
fr[(long int)(c[i]-'a')]++;
for(i=0;i<26;i++)
if(fr[i]) { fr[j]=fr[i];a[i]=a[j];j++;}
a[j]=0;j--;
r=l-fr[j];
while(r-fr[j]>=1)
{ if(lt==a[0])
{ fprintf(g,"%c",a[1]);lt=a[1];fr[1]--;r--;
if(!fr[1])
{ for(i=1;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
j--;
}
}
else
{ fprintf(g,"%c",a[0]);lt=a[0];fr[0]--;r--;
if(!fr[0])
{ for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
j--;
}
}
}
r+=fr[j];
while(r)
{ if(r%2)
{ fprintf(g,"%c",a[j]);lt=a[j];fr[j]--;r--;
}
else
{ fprintf(g,"%c",a[0]);lt=a[0];fr[0]--;r--;
if(!fr[0])
{ for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
j--;
}
}
}
fprintf(g,"\n");
fcloseall();
return 0;
}