Cod sursa(job #112075)
#include<stdio.h>
#include<string.h>
char cit[1000010],a[30],*c,lt,cf;
long int i,j,fr[30],l,r,poz,k;
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--;
if(fr[j]>l-fr[j])
{ fprintf(g,"%c",a[j]);fr[j]--;
poz=0;
for(i=1;i<=fr[j];i++)
{ fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;
if(!fr[poz])poz++;
}
fprintf(g,"\n");
fcloseall();
return 0;
}
if(fr[j]==l-fr[j])
{ poz=0;
for(i=1;i<=fr[j];i++)
{ fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;
if(!fr[poz])poz++;
}
fprintf(g,"\n");
fcloseall();
return 0;
}
while(l-fr[j]>fr[j])
{
if(lt!=a[0])
{ fprintf(g,"%c",a[0]); lt=a[0];fr[0]--;l--;
if(!fr[0])
{ for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
j--;
}
}
else
{ fprintf(g,"%c",a[1]) ;lt=a[1];fr[1]--;l--;
if(!fr[1])
{ for(i=1;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
j--;
}
}
}
if(lt!=a[0])
{ poz=0;
while(l)
{ fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;fr[j]--;l-=2;
if(!fr[poz])poz++;}
fprintf(g,"\n");
fcloseall();
return 0;
}
for(;;);
fprintf(g,"\n");
fcloseall();
return 0;
}