Cod sursa(job #190393)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 21 mai 2008 22:40:19
Problema Ordine Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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 pozm,cntm,sumt,ultim;

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; i < strlen(buff) && buff[i] != '\n'; ++i )
		++a[ buff[i] - 'a' ], ++sumt;
	detmax(pozm,cntm);
	ultim = -1;

	for ( i = 0; i < strlen(buff) && 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;
}