Cod sursa(job #163476)

Utilizator marinaMarina Horlescu marina Data 22 martie 2008 13:06:59
Problema Sortare Scor 90
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasa a 10-a Marime 1.15 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 D[NMAX];

int h;

void sir(int l)
{
	++h;
	if(l == 1) 
	{
		D[1] = 1; return;
	}
	if(l == 2)
	{
		++h;
		D[1] = 1; D[2] = 2; return;
	}
	if(A[l] != B[l] && B[l] != C[l] && C[l] != A[l])
	{
		sir(l - 2);
		int i;
		for(i = l; i >= C[l]-1; --i)
			D[i+2] = D[i];
		D[C[l]] = l;
		for(i = C[l] - 2; i >= B[l]; --i)
			D[i+1] = D[i];
		D[B[l]] = l-1;
	}
	else
	{
		sir(l - 1);
		int i;
		for(i = l; i >= B[l]; --i)
			D[i+1] = D[i];
		D[B[l]] = l;
	}
}
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;
	}
	sir(N);
	printf("%d\n", h);
	for(i = 1; i < N; ++i)
		printf("%d ", D[i]);
	printf("%d\n", D[N]);
}