Cod sursa(job #200763)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 26 iulie 2008 11:36:36
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>

#define maxn 5010

int n, sol;
int a[maxn], b[maxn], c[maxn], s[maxn];

void mark(int x, int y)
{
	int i, nr = 0;

	for (i=1; i<=n; i++)
		if (s[i] == 0) 
		{
			nr++;
			if (nr == x) 
			{
				s[i] = y;
				break;
			}
		}
}

int main()
{
	freopen("sortare.in", "r", stdin);
	freopen("sortare.out", "w", stdout);

	scanf("%d ", &n);

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

	for (i=n; i>0; )
	{
		sol++;

		if (a[i]!=b[i] && a[i]!=c[i] && b[i]!=c[i]) 
		{
			mark(a[i], i-1);
			if (a[i] < b[i]) mark(b[i]-1, i);
			else mark(b[i], i);
			i -= 2;
		}
		else {
				 if (a[i]==b[i] || a[i]==c[i]) mark(a[i], i);
				 else mark(b[i], i);
				 i--;
			 }
	}

	printf("%d\n", sol);
	for (i=1; i<=n; i++) printf("%d ", s[i]);
	printf("\n");

	return 0;
}