Cod sursa(job #163460)

Utilizator DorinOltean Dorin Dorin Data 22 martie 2008 12:14:58
Problema Sortare Scor 5
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasele 11-12 Marime 1.06 kb
# include<stdio.h>


# define input "sortare.in"
# define output "sortare.out"

# define max 5001

int res[max],i,n,pos[max],x,y,pas,m,add;

struct pozitii
{
       int x,y,z;
}p[max];

int main()
{
	freopen(input,"r",stdin);
	freopen(output,"w",stdout);

    scanf("%d",&n);
    m = n;
    pos[1] = 1;
    for(i=2;i<=n;i++)
	{
       scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
       pos[i] = i;
    }
    
	while(n>1)
	{
	   if(p[n].x == p[n].y && p[n].y == p[n].z)
	   {
		   res[pos[p[n].x]] = n;
		   for(i=p[n].x;i<=n;i++)
			  pos[i] = pos[i+1];
		   n--;
		   add++;
	   }
	   else
	   {
		  x = p[n].x;
		  if(p[n].y != x)
			y = p[n].y;
		  else
			y = p[n].z;

		   int aux;
		  if(x > y)
		   aux = x,x=y,y=aux;

		  res[pos[x]] = n;
		  res[pos[y]] = n-1;
		  add=1;

		  for(i=x;i<=n;i++)
		  {
			  if(i == y-1) add++;
			  pos[i] = pos[i+add];

		  }

		  n-=2;
	   }
	   pas++;
	}
	printf("%d\n",pas+1);
	for(i=1;i<=m;i++)
	{
	   if(!res[i]) res[i] =1;
	   printf("%d ",res[i]);
	}
    
	return 0;
}