Cod sursa(job #190395)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 21 mai 2008 22:42:53
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstring>

#define fin  "ordine.in"
#define fout "ordine.out"

const int Nmax = 1000012;
const int Cmax = 27;

char buff[Nmax];
int a[Cmax];

int N,pozm,cntm,sumt,ultim;

inline void detmax(int &p,int &nr)
{
	int i;

	nr = 0;
	for ( i = 0; i < Cmax; ++i )
		if ( a[i] > nr )
			nr = a[i], p = i;	
}

int main()
{
	int i,j;

	freopen(fin,"r",stdin);
	freopen(fout,"w",stdout);

	fgets(buff,Nmax,stdin);

	for ( i = 0; buff[i] != '\n'; ++i )
		++a[ buff[i] - 'a' ], ++sumt;
	
	detmax(pozm,cntm);
	ultim = -1;

	for ( i = 0; buff[i] != '\n'; ++i )
	{
		for ( j = 0; j < Cmax && ( a[j] == 0 || j == ultim ); ++j );

		if ( 2 * cntm > sumt || j == pozm )
			printf("%c",pozm + 'a'), --a[pozm], ultim = pozm;
		else
		{
			printf("%c",j + 'a');
			--a[j];
			ultim = j;
		}

		--sumt;
		detmax(pozm,cntm);
	}

	printf("\n");

	return 0;
}