Pagini recente » Cod sursa (job #2325029) | Cod sursa (job #2639097) | Cod sursa (job #4263) | Cod sursa (job #2036951) | Cod sursa (job #163476)
Cod sursa(job #163476)
//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]);
}