Cod sursa(job #192868)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 31 mai 2008 22:24:27
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#define IN "dame.in"
#define OUT "dame.out"
#define N_MAX 1100

int n;
int v[N_MAX];

void scan()
{
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d", &n);
}

void solve()
{
	switch(n)
	{
		case 1: {printf("1\n1 1\n"); return;}
		case 2: {printf("1\n1 1\n");  return;}
		case 3: {printf("2\n1 1\n2 3\n");   return;}
	}	
	int aux,st=1,end=0,x;
	for(int i=2;i<=n;i+=2)
		v[++end]=i;
	if(n%12==3 || n%12==9)
	{
		for(int i=st;i<end;++i)
			v[i]=v[i+1];
		v[end]=2;
	}	
	x=end+1;
	for(int i=1;i<=n;i+=2)
		v[++end]=i;
	if(n%12==8)
		for(int i=x;i<end;i+=2)
		{
			aux=v[i];
			v[i]=v[i+1];
			v[i+1]=aux;
		}
	if(n%12==2)
	{
		aux=v[x],v[x]=v[x+1],v[x+1]=aux;
		for(int i=x+2;i<end;++i)
			v[i]=v[i+1];
		v[end]=5;
	}
	if(n%12==3 || n%12==9)
	{
		for(int i=x;i<end;++i)
			v[i]=v[i+2];
		v[end-1]=1;
		v[end]=3;
	}	
	printf("%d\n",end);
	for(int i=st;i<=end;++i)
		printf("%d %d\n",v[i],v[v[i]]); 
}

int main()
{
	scan();
	solve();
	return 0;
}