Cod sursa(job #345308)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 2 septembrie 2009 15:05:28
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define Nmax 1005

int a[Nmax];
int n,i,r,z,zi;

void do_mic(){
	if(n==1 || n==2){
   	 printf("%d\n",1);
   	 printf("%d %d\n",1,1);
   }else
   if(n==3){
   	 printf("%d\n",2);
   	 printf("%d %d\n",1,1);
   	 printf("%d %d\n",2,3);
   }
}

void swap(int& x,int& y){
	int t=x;x=y;y=t;
}

void write(){
	int i,j;
   printf("%d\n",n);
   for(i=1,j=1;i<=n;++i){
   	while(a[j]==-1) ++j;
      printf("%d %d\n",i,a[j]);
      ++j;
   }
}

int main(){
	freopen("dame.in","r",stdin);
   freopen("dame.out","w",stdout);
   scanf("%d",&n);
   r= n % 12;
   if(n<4) do_mic();
   else{
   for(i=2;i<=n;i+=2) a[++z]=i;
   if(r==3 || r==9) a[1]=-1, a[++z]=2;
   zi=z+1;
   for(i=1;i<=n;i+=2) a[++z]=i;
   if(r==8)
     for(i=zi;i<=z;i+=2)
       if(i+1<=z) swap(a[i],a[i+1]);
   if(r==2){
     swap(a[zi],a[zi+1]);
     if(a[zi+2]==5)a[zi+2]=-1, a[++z]=5;
   }
   if(r==3 || r==9) a[zi]=-1, a[zi+1]=-1, a[++z]=1,a[++z]=3;
   write();
   }

   fclose(stdin); fclose(stdout);
   return 0;
}