Cod sursa(job #93156)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 17 octombrie 2007 20:45:42
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>

const int N_MAX = 1024;

int N, sol[N_MAX];

int main()
{
	freopen("dame.in", "r", stdin);
#ifndef _SCREEN_
	freopen("dame.out", "w", stdout);
#endif

	int rest, i;
	scanf("%d\n", &N);
	if (N == 1) {
		printf("1\n1 1\n");
		return 0;
	}

	if (N == 2) {
		printf("1\n");
		printf("1 1\n");
		return 0;
	}

	if (N == 3) {
		printf("2\n");
		printf("1 1\n3 2\n");
	}
	
	rest = N % 12;
	if (rest != 3 && rest != 9) {
		for (i = 2; i <= N; i += 2) {
			sol[++ sol[0]] = i;
		}
	} else {
		for (i = 4; i <= N; i += 2) {
			sol[++ sol[0]] = i;
		}
		sol[++ sol[0]] = 2;
	}
	int fin = sol[0] + 1, cinci = 0;

	if (rest != 8) {
		for (i = 1; i <= N; i += 2) {
			sol[++ sol[0]] = i;
			if (i == 5) cinci = sol[0];
		}
	} else {
		for (i = 1; i <= N; i += 4) {
			sol[++ sol[0]] = i + 2;
			if (i + 2 == 5) cinci = sol[0];
			sol[++ sol[0]] = i;
			if (i == 5) cinci = sol[0];
		}
	}
	
	int aux;

	if (rest == 2) {
		aux = sol[fin];
		sol[fin] = sol[fin + 1];
		sol[fin + 1] = aux;

		sol[++ sol[0]] = 5;
		for (i = cinci; i <= sol[0]; i ++) {
			sol[i] = sol[i + 1];
		}
		sol[0] --;
	} 

	if (rest == 3 || rest == 9) {
		sol[++ sol[0]] = sol[fin];
		sol[++ sol[0]] = sol[fin + 1];

		for (i = fin; i <= sol[0]; i ++) {
			sol[i] = sol[i + 2];
		}
		sol[0] -= 2;
	}

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

	return 0;
}