Cod sursa(job #117147)

Utilizator za_wolfpalianos cristian za_wolf Data 20 decembrie 2007 20:22:15
Problema Tije Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include<stdio.h>
#include<string.h>
int z[101],elem,qqq,x[101][101],i,kkt,fin,w,j,n,m,k,l,a,s,poz,q,y[101];
void interschimb(int k, int p)
{
	int i;
	memcpy(z,x[k],sizeof(x[k]));
	memcpy(x[k],x[p],sizeof(x[p]));
	memcpy(x[p],z,sizeof(z));

}
void afis(int a,int b)
{
	printf("%d %d\n",a,b);
}

void golesc(int poz)
{
	int i,j;
   while (x[poz][0]>1)
   {
	for (i=n+1;i>poz;i--)
	  while (x[i][0]<n&&x[poz][0]>1)
	  {
		 x[i][0]++;
		 x[i][x[i][0]]=x[poz][x[poz][0]];
		 x[poz][x[poz][0]]=0;
		 x[poz][0]--;
//		 y[poz]=0;
		 afis(poz,i);
	  }
   }
}

int caut(int nr,int q)
{
	int i,j,k,p;
   k=1000;
   for (i=q+1;i<=n+1;i++)
   {
	for (j=x[i][0];j>=1;j--)
		if (x[i][j]==nr)
		 {
			if (j<k) {k=j;p=i;}
			j=1;
		 }
   }
   return p;
}

int clear(int poz,int nr)
{
	int i,j,k;
   k=1;
	while (x[poz][x[poz][0]]!=nr)
   {
	  for (i=n+1;i>q;i--)
		if (x[i][0]<n&&poz&&x[poz][x[poz][0]]!=nr&&i!=poz&&x[poz][0])
		{
			x[i][++x[i][0]]=x[poz][x[poz][0]];
			x[poz][x[poz][0]]=0;
			x[poz][0]--;
			printf("%d %d\n",poz,i);
//			afis(poz,i);
			i=n+2;
		}
/*	  else
	  if (poz&&x[poz][x[poz][0]]==nr)
	  {
		return i;
	  }
*/
   }
   return 1;
}
int ver(int s)
{
	int w,k;
	k=0;
	for (w=i+1;w<=n+1;w++)
	{
	if (w!=l) k+=n-x[w][0];
	if (k>=s) return 1;
	}
	if (k>=s) return 1;
	return 0;
}

int main()
{
	freopen("tije.in","r",stdin);
	freopen("tije.out","w",stdout);
   scanf("%d",&n);

   for (i=1;i<=n;i++)
	for (j=1;j<=n;j++)
		x[i][++x[i][0]]=i;

   for (i=1;i<=n;i++)
   {
	  golesc(i);
	  memset(y,0,sizeof(y));
	  y[x[i][1]]=1;

	  while (x[i][0]<n)
	  {
		  fin=101;
		  elem=-1;

		  for (j=1;j<=n;j++)
		  if (y[j]==0)
		  {
			for (l=i+1;l<=n+1;l++)
			 {
				for (w=x[l][0];w>=1&&x[l][w]!=j;w--);
//				if (!(w==0&&x[l][1]!=j))
				{
				s=x[l][0]-w;
				if (s<fin) if (ver(s)) {fin=s; poz=l; elem=j;}
				}
			 }
		  }











				kkt=clear(poz,elem); // clear tija poz pana la elementu j

				x[poz][x[poz][0]--]=0;

				x[i][++x[i][0]]=elem;

//				afis(poz,i);
				printf("%d %d\n",poz,i);
				y[elem]=1;









	  }
   }


   return 0;
}