Cod sursa(job #175804)

Utilizator firewizardLucian Dobre firewizard Data 10 aprilie 2008 13:51:34
Problema Dame Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdio.h>
long n,p[1000000],imp[1000000],i,d,pare,impare,j;
int main()
{
    freopen ("dame.in","r",stdin);
    freopen ("dame.out","w",stdout);
    scanf("%ld",&n);d=n%12;
    if (d==3||d==9)
    {
       for (i=4;i<=n;i+=2){
           j++;p[j]=i;}
       p[j+1]=2;
       pare=j+1;
       j=0;
       //^pare
       for (i=5;i<=n;i+=2)
           {j++;imp[j]=i;}
       p[j+1]=1;
       p[j+2]=3;
       impare=j+2;
       //^impare
    }
    else if (d==8){
       for (i=2;i<=n;i+=2)
           {j++;p[j]=i;}
       pare=j;
       //^pare
       j=0;
       for (i=1;i<=n;i+=4){
            if(i+2<=n)
            {j++;
            imp[j]=i+2;}
            j++;
            imp[j]=i;
            }
            impare=j;
       //^impare
       }
    else if (d==2){
            for (i=2;i<=n;i+=2){
                j++;p[j]=i;}
            pare=j;
            imp[1]=3;
            imp[2]=1;
            j=2;
            for(i=7;i<=n;i+=2)
            {j++;p[j]=i;}
            p[j+1]=5;
            impare=j+1;
            }
    else{
         for(i=2;i<=n;i+=2)
         {j++;p[j]=i;}pare=j;
         j=0;
         for(i=1;i<=n;i+=2)
         {j++;imp[j]=i;}impare=j;
         }
    if(n==2)printf("1\n1 2");
    else if(n==3)printf("2\n1 1\n2 3");
    else{     
    printf("%ld\n",pare+impare);
    for(i=1;i<=pare;i++)
    printf("%ld %ld\n",i,p[i]);
    for(i=1;i<=impare;i++)
    printf("%ld %ld\n",i+pare,imp[i]);}
    
 return 0;
}