Cod sursa(job #176539)

Utilizator raula_sanChis Raoul raula_san Data 11 aprilie 2008 13:53:17
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <vector>

#define maxN 5001

int N;
int S[3][maxN], Cnt[maxN];

void Swap(int &i, int &j)
{
	int t = i;
	i = j;
	j = t;
}

int main()
{
	freopen("sortare.in", "rt", stdin);
	freopen("sortare.out", "wt", stdout);
	
	S[0][0] = 0;
	S[1][1] = 1;
    Cnt[0] = 1;
    Cnt[1] = 1;
	
	int i;
	for(scanf("%d", &N), i=2; i<=N; ++i)
	{
		int a, b, c;
		scanf("%d %d %d", &a, &b, &c);
		
		memset(S[i%3], 0, sizeof(S[i%3]));
		
		if(a > b) Swap(a, b);
		if(a > c) Swap(a, c);
		if(b > c) Swap(b, c);
		
		int j, k;
		if(a != b && b != c)
		{
			S[i%3][a] = 1;
			S[i%3][b] = 2;
			k = 0;
			
			for(j=1; j<=i; ++j)
				if(!S[i%3][j]) S[i%3][j] = S[(i-2)%3][++k] + 2;
				
			Cnt[i] = Cnt[i-2] + 1;
		}
		else
		{
			if(a == b)
				S[i%3][a] = 1;
			else
				S[i%3][b] = 1;
				
			k = 0;
			for(j=1; j<=i; ++j)
				if(!S[i%3][j]) S[i%3][j] = S[(i-1)%3][++k] + 1;

			Cnt[i] = Cnt[i-1] + 1;
		}
	}

	printf("%d\n", Cnt[N]);
	
	for(i=1; i<=N; ++i)
		printf("%d ", S[N%3][i]);
	
	fclose(stdin);
	fclose(stdout);

	return 0;
}