Cod sursa(job #184785)

Utilizator razvi9Jurca Razvan razvi9 Data 24 aprilie 2008 12:15:12
Problema Taramul Nicaieri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
#include<cstdlib>
int gi[101],ge[101],ordi[101],orde[101],i,j,n,y,x,m;
int cmpe(const void *a,const void *b)
{
	return ge[*(int*)b]-ge[*(int*)a];
}
int cmpi(const void *a,const void *b)
{
	return gi[*(int*)b]-gi[*(int*)a];
}
int main()
{
	freopen("harta.in","r",stdin);
	freopen("harta.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d %d",&gi[i],&ge[i]);
		ordi[i]=i;
		orde[i]=i;
		m+=gi[i];
	}
	printf("%d\n",m);
	qsort(orde+1,n,sizeof(int),cmpe);
	for(i=1;i<=n;i++)
		if(ge[orde[i]]==0)
			break;
		else
		{
			x=orde[i];
			qsort(ordi+1,n,sizeof(int),cmpi);
			for(j=1;j<=ge[x];j++)
			{
				y=ordi[j];
				if(y==x)
				{
					ge[x]++;
					continue;
				}
				printf("%d %d\n",x,y);
				gi[y]--;
			}
		}
	fclose(stdout);
	return 0;
}