Cod sursa(job #160559)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 16 martie 2008 10:08:09
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <string.h>
#define J 50
#define N 100000
char v[N];
int f[N];
struct solutie{
	int aa,bb;
};	
int main()
{
	solutie sol[N];
	int l,i,j,nr=0;
	int inj,gata,aux,aux1;
	freopen("ordine.in", "r",stdin);
	freopen("ordine.out", "w",stdout);
	scanf("%s\n", v);
	l=strlen(v);
	for(i=0;i<l;++i)
	{
		if(!f[v[i]]) ++nr;
		++f[v[i]];
	}
		
	inj=l;
	while(inj>1)
	{
		inj/=2;
		do{
			gata=1;
				for(i=0;i<l-inj;++i)
					if (v[i]>v[i+inj])
					{
						gata=0;
						aux=v[i];
						aux1=f[i];
						v[i]=v[i+inj];
						f[i]=f[i+inj];
						v[i+inj]=aux;
						f[i+inj]=aux1;
					}
		}while(!gata);
	}
	
	sol[0].aa=v[0];
	sol[0].bb=f[0];
	v[0]=0;
	
	for(i=1;i<l;++i)
		for(j=0;j<l;++j)
			if( sol[i-1].aa!=v[j] && ( v[j]!=0 || f[i]==(l-i+1/2)+1 ) )
			{
				sol[i].aa=v[j];
				sol[i].bb=f[j];
				v[j]=0;
				break;
			}
	//N-x+1)/2+1		
			
	for(i=0;i<l;++i)
		printf("%c", sol[i].aa,sol[i].bb);
	
	
	return 0;
}