Cod sursa(job #483101)

Utilizator crushackPopescu Silviu crushack Data 6 septembrie 2010 22:01:13
Problema Dame Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#define NMax 1000

const char IN[]   ="dame.in";
const char OUT[]  ="dame.out";

int N,p;
int a[NMax+10];

void add(int x,int v)
{
	int i;
	for (i=p-1;i>=x;i--)
		a[i+1]=a[i];
	a[x]=v;
	p++;
}

void Delete(int x)
{
	int i;
	for (i=x+1;i<p;i++)
		a[i]=a[i+1];
	p--;
}

void schimb(int &a,int &b)
{
	int tmp=a;
	a=b;
	b=tmp;
}

int main()
{
	int i,x;
	freopen(IN,"r",stdin);
	scanf("%d",&N);
	fclose(stdin);
	freopen(OUT,"w",stdout);
	if (N>1 && N<4)
	{
		if (N==2)
			printf("1\n1 1\n");
		else
			printf("2\n1 1\n3 2\n");
		fclose(stdout);
	}
	p=0;
	for (i=2;i<=N;i+=2)
	{
		a[p++]=i;
	}
	if (N%12==3 || N%12==9)
		Delete(0),
		add(p,2);
	x=p;
	for (i=1;i<=N;i+=2)
		add(p,i);
	if (N%12==8)
		for (i=x;i<p;i+=2)
			schimb(a[i],a[i+1]);
	if (N%12==2)
		schimb(a[x],a[x+1]),
		Delete(a[x+2]),
		add(p,5);
	if (N%12==3 || N%12==9)
		Delete(x),
		Delete(x),
		add(p,1),
		add(p,3);
	printf("%d\n",N);
	for (i=0;i<N;i++)
		printf("%d %d\n",i+1,a[i]);
	fclose(stdout);
	return 0;
}