Pagini recente » Istoria paginii runda/test150505/clasament | Cod sursa (job #2285572) | Cod sursa (job #409475) | Istoria paginii runda/trainingday | Cod sursa (job #166808)
Cod sursa(job #166808)
#include<stdio.h>
#include<string.h>
#define SMAX 1000002
char *p; long n,i,s[26],gasit=0,dusman,last=-1;
/// if dusman!=-1 --> s-a gasit caracter
/// care apare de (n-i)/2+1 ori
int cauta()
{
for(int j=0;j<26;j++)
if(s[j]>0 && j!=last)
{s[last=j]--; return last;}
}
int functie()
{
if ( s[cauta()]+1 == (n-i)/2+1 )
dusman=last;
return last; }
main()
{
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
p=new char[SMAX];
gets(p); n=strlen(p);
for(i=0;i<n;i++) s[ p[i]-'a' ] ++;
delete p;
for(i=0;i<n && dusman!=-1;i++)
printf( "%c" , functie()+'a' );
if(dusman!=-1)
for(;i<n;i++)
if(last!=dusman) {printf("%c",dusman+'a'); s[dusman--]; last=dusman;}
else {last=cauta(); printf("%c",last+'a'); s[last--];}
printf("\n"); return 0; }