Cod sursa(job #134845)

Utilizator crawlerPuni Andrei Paul crawler Data 12 februarie 2008 14:22:13
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<string>
#include<algorithm>

using namespace std;

char c[1000007];
int f[128],n,cnt;

int main()
{
    freopen("ordine.in","r",stdin);
    freopen("ordine.out","w",stdout);
    #define int char
    scanf("%s", c);
    
    for (int i=0;i<strlen(c);++i)
    ++f[c[i]];
    int lst,good='a';
    #define tmp good
    cnt=n=strlen(c);
    lst=0;
    while(cnt--)
    {
        //printf("%d\n",(cnt+1)/2+1);        
        int lol=0;        
        for(int i=good;i<='z';++i)
        if ((i^lst)&&(f[i]==((cnt+1)/2+1)))            
        {
        lol=i;
        break;
        }
        if(lol)
        {
          printf("%c", lol);
          --f[lol];
          if((lol==good)&&(f[good]==0))good++;          
          lst=lol;
          //printf(" lol");
        }
        else
        while(1)
        if((tmp^lst)&&(f[tmp]))
        {
          printf("%c", tmp);
          --f[tmp];
          if((lol==good)&&(f[good]==0))good++;                    
          lst=lol;
          break;
        }       
        else ++tmp;
        //printf("\n");
    }
    
    return 0;    
}