Cod sursa(job #123123)

Utilizator SofinetiSofineti Mihai Sofineti Data 14 ianuarie 2008 18:58:49
Problema Dame Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
// infoarena --> 20 puncte;
// Trebuie modificat back() si valid()
//#include<iostream.h>
#include<math.h>
#include<stdio.h>
//#include<time.h>
long d[1000],fr[1000],n;

//long t1,t2;

int mod(long x,long y){
	   if(x>y)return x-y;
	   else return y-x;
	   }
void back(long i){
   long val;
   for(val=1;val<=n;val++)

   if(fr[val]==0){
	       d[i]=val;
	       fr[val]=1;
	       int ok=1;
	       for(long p=1;p<i;p++){
				if(d[i]==d[p]){ok=0;break;}
				if(mod(d[p],d[i])==mod(p,i)){ok=0;break;}
				    }

	       if(ok==1)
		if(i==n){
		       printf("%ld\n",n);
		       for(long p=1;p<=n;p++)
			       printf("%ld %ld\n",p,d[p]);
		       n=-1;
		       break;
		       }
	       else back(i+1);
	       fr[val]=0;
	       }
    }
int main(){
//t1=clock();
freopen("dame.in","r",stdin);
freopen("dame.out","w",stdout);
scanf("%ld",&n);
//cin>>n;
if(n==1){printf("1\n");printf("1 1");}
if(n==2){printf("1\n");printf("1 1");}
if(n==3){printf("2\n");printf("1 1\n");printf("3 2\n");}
if(n==4){printf("3\n");printf("1 1\n");printf("2 4\n");printf("3 2\n");}
if(n==5){printf("5\n");printf("1 1\n");printf("2 3\n");printf("3 5\n");printf("4 2\n");printf("5 4\n");}
if(n>5)back(1);
//t2=clock();
//printf("Timp: %f",(t2-t1)/18.2);
return 0;
}