Cod sursa(job #163467)

Utilizator marinaMarina Horlescu marina Data 22 martie 2008 12:42:02
Problema Sortare Scor 55
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasa a 10-a Marime 1.17 kb
//infoarena - Preoni 2008 Runda finala Sortare
#include <stdio.h>
#define INPUT "sortare.in"
#define OUTPUT "sortare.out"
#define NMAX 5001

int N;

int A[NMAX], B[NMAX], C[NMAX];

int h;

int *sir(int l)
{
	++h;
	int *D = new int[l+1];
	if(l == 1)
	{
		D[1] = 1;
		return D;
	}
	if(l == 2)
	{
		++h;
		D[1] = 1; D[2] = 2;
		return D;
	}
	
	int i;
	for(i = 1; i <= l; ++i) D[i] = 0;
	
	int *E;
	if(A[l] != B[l] && B[l] != C[l] && A[l] != C[l])
		D[B[l]] = l-1,
		D[C[l]] = l,
		E = sir(l-2);
	else
		D[B[l]] = l,
		E = sir(l-1);

	int poz = 0;
	for(i = 1; i <= l; ++i)
		if(!D[i]) D[i] = E[++poz];
	delete[] E;
	return D;
}

int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	scanf("%d", &N);
	int i;
	for(i = 2; i <= N; ++i)
	{
		int ai, bi, ci;
		scanf("%d %d %d", &ai, &bi, &ci);

		int aux;
		if(bi < ai)
			aux = ai, ai = bi, bi = aux;
		if(ci < bi)
			aux = ci, ci = bi, bi = aux;
		if(bi < ai)
			aux = ai, ai = bi, bi = aux;
		
		A[i] = ai; B[i] = bi; C[i] = ci;
	}
	
	int *D = sir(N);
	
	printf("%d\n", h);
	for(i = 1; i < N; ++i)
		printf("%d ", D[i]);
	printf("%d\n", D[N]);
	return 0;
}