Cod sursa(job #166808)

Utilizator pandaemonAndrei Popescu pandaemon Data 28 martie 2008 15:12:41
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#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; }