Cod sursa(job #160558)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 16 martie 2008 10:00:13
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <string.h>
#define J 50
#define N 1000
char v[N];
int f[N];
int judete[N];
struct solutie{
	int aa,bb;
};	
int main()
{
	solutie sol[N];
	int l,i,j,nr=0,n;
	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(!judete[v[i]]) ++nr;
		++judete[v[i]];
	}
		
	for(i=0;i<l;++i)
		f[i]=judete[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);
	}
	//for(i=0;i<l;++i)
	//	printf("%c %d \n", v[i],f[i]);
	//printf("\n");
	
	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)
			{
				sol[i].aa=v[j];
				sol[i].bb=f[j];
				v[j]=0;
				break;
			}
			
	for(i=0;i<l;++i)
		printf("%c", sol[i].aa,sol[i].bb);
	
	
	return 0;
}