Pagini recente » Diferente pentru olimpici intre reviziile 180 si 42 | Cod sursa (job #2069482) | Istoria paginii olimpici | Cod sursa (job #3209045) | Cod sursa (job #166819)
Cod sursa(job #166819)
#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(int interzis)
{
for(int j=25;j>=0;j--) {
if(s[j]>0 && j!=interzis) last=j;
if(s[j] == (n-i)/2+1 && j!=interzis) return last=dusman=j;
}
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" , cauta(last)+'a' ); s[last]--;}
if(dusman!=-1)
for(;i<n;i++)
if(last!=dusman) {printf("%c",dusman+'a'); s[dusman--]; last=dusman;}
else {printf("%c",cauta(dusman)+'a'); s[last--];}
printf("\n"); return 0; }