Cod sursa(job #163635)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 22 martie 2008 14:50:12
Problema Sortare Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasa a 10-a Marime 0.97 kb
#include <cstdio>

#define fin  "sortare.in"
#define fout "sortare.out"

const int Nmax = 5010;

int N,v[Nmax],use[Nmax];
int a[Nmax],b[Nmax],c[Nmax];

void readdata()
{
	int i;

	freopen(fin,"r",stdin);
	freopen(fout,"w",stdout);

	scanf("%d",&N);

	for ( i = 1; i <= N; ++i )
		scanf("%d%d%d",&a[i],&b[i],&c[i]);
}

void solve()
{
	int i,j,p;
	int hmax = 0;

	if ( N == 1 )
	{
		printf("1\n1\n");
		return ;
	}
	if ( N == 2 )
	{
		printf("2\n1 2\n");
		return ;
	}

	for ( i = N; i > 0; i-=2 )
	{
		hmax++;
		p = 0;
		for ( j = 1; j <= N; ++j )
			if ( v[j] == 0 )
			{
				++p;	
				if ( p == a[i - 1] )
					v[j] = N - i + 1;
				if ( p == b[i - 1] )
					v[j] = N - i + 2;
				use[v[j]] = 1;
			}
	}
	
	for ( i = 1; i <= N; ++i)
		if ( v[i] == 0 )
		for ( j = 1; j <= N; ++j )
			if ( use[j] == 0 )
			{
				use[j]=1;
				v[i]=j;
				break;
			}

	printf("%d\n",hmax);

	for ( i = 1; i <= N; ++i )
		printf("%d ",v[i]);
	printf("\n");
}

int main()
{
	readdata();
	solve();
	return 0;
}