Cod sursa(job #902745)

Utilizator superman_01Avramescu Cristian superman_01 Data 1 martie 2013 16:30:12
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<cstring>


#define MAX_SIZE 1000005

FILE *f=fopen("ordine.in","r");
FILE *g=fopen("ordine.out","w");

using namespace std;

char sir[MAX_SIZE];
int frec[29],size;
int ant;
void read ( void )
{
	fgets(sir,MAX_SIZE,f);
	for(int i(0); sir[i] ; ++i,++size )
		++frec[sir[i]-'a'];
	
}
void solve ( void )
{
	ant=-1;
	for(int i(1) ; i <= size ; ++i )
	{ 
	     int ch=-1;	
		 
		for( int ii(0) ; ii < 26 ; ++ii )
		
			if( ant != ii && ( frec[ii] ==  (( size - i +1)/2+1) ) ) 
			{
				ch=ii ;
				break;
				
			}			
		 	
          if( ch != -1 )
		  {
			  fprintf(g,"%c",char(ch+'a'));
			  --frec[ch];
			  ant=ch;
		  }
		  else
			  for(int j(0); j < 26 ; j++ )
				  if( frec[j] && j!=ant)
				  {
					  fprintf(g,"%c",char(j+'a'));
					  		  --frec[j];
					  ant=j;
					  break;
				  }

			
		
	}		
	
	
	
}
int main( void )
{
	read();
	solve();
	return 0;	
}