Cod sursa(job #203108)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 13 august 2008 19:51:44
Problema Dame Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <stdio.h>

#define NMAX 510
#define FIN "dame.in"
#define FOUT "dame.out"


int n,i,j,poz,pozz,aux;
int impar[NMAX],par[NMAX];


int main()
{

freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);

scanf("%d", &n);

if (n==1)
    {
     printf("1\n");
     printf("1 ");
     printf("1");
     }
     else
	if (n==2)
	   {
	    printf("1\n");
	    printf("1 ");
	    printf("1");
	    }
	     else
	       if (n==3)
		   {
		    printf("2\n");
		    printf("1 ");
		    printf("1\n");
		    printf("2 ");
		    printf("3");
		    }
		    else
		      if (n>=4)
			 {
			  printf("%d\n", n);
			  for (i=1;i<=n;i++)
			      if (i%2==0)
				 par[i/2]=i;
				 else
				 impar[i/2+1]=i;
			  if (n%12==3 || n%12==9)
			     {
			     aux=par[n/2];
			     par[n/2]=par[1];
			     par[1]=aux;
			     }
			  if (n%12==8)
			     for (i=1;i<=n/2;i+=2)
				  {
				  aux=impar[i];
				  impar[i]=impar[i+1];
				  impar[i+1]=aux;
				  }
			 if (n%12==2)
			    {
			     for (i=1;i<=n/2;i++)
				 if (impar[i]==5)
				    poz=i;
				    else
				 if (impar[i]==1)
				    {
				     for (j=1;j<=n/2;j++)
					 if (impar[j]==3)
					    {
					    aux=impar[i];
					    impar[i]=impar[j];
					    impar[j]=aux;
					    }
					    }
				 aux=impar[poz];
				 impar[poz]=impar[n/2];
				 impar[n/2]=aux;
				      }
				      else
				      if (n%12==3)
					 {
					  for (i=1;i<=n/2;i++)
					  if (impar[i]==3)
					   poz=i;
					   for (i=1;i<=n/2;i++)
					   if (impar[i]==1 )
					     pozz=i;
					   aux=impar[poz];
					   impar[poz]=impar[n/2];
					   impar[n/2]=aux;
					   aux=impar[pozz];
					   impar[pozz]=impar[n/2-1];
					   impar[n/2-1]=aux;
					  }
				}
if (n>=4)
   {
    for (i=1;i<=n/2;i++)
	printf("%d %d\n",i,par[i]);
    for (i=n/2+1;i<=n;i++)
	printf("%d %d\n",i,impar[i-n/2]);
    }
return 0;
}