# Posted By

Nursoltan on 07/05/11

# Statistics

Viewed 387 times
Favorited by 0 user(s)

# ch1 : Checker Challenge

/ Published in: C++
`/*  NAME : Nursoltan  PROB : checker  LANG : C++  DATE : 03/07/11 20:40*/#include <algorithm>#include <bitset>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <sstream>#include <iostream>#include <map>#include <set>#include <stack>#include <utility>#include <queue> using namespace std; #define MAX 100#define INF INT_MAX#define eps (1e-9) #define FOR(_i,_k,_n) for(int (_i)=(_k); (_i)<(_n); (_i)++)#define FORR(_i,_k,_n) for(int (_i)=(_k); (_i)>=(_n); (_i)--)#define CLR(_x) memset((_x),0,sizeof(_x))#define SQR(_x) ((_x)*(_x))#define all(_x) _x.begin(),_x.end()#define sz(_x) sizeof(_x) #define vc vector<int>#define pb push_back#define mp make_pair#define iss istringstream#define oss ostringstream#define px first#define py second typedef long long ll;typedef pair <int,int> point;int ABS(int _x){ return _x>0?_x:-_x; } int N,shiid[20],cnt;int VIS,RDIA,LDIA; void rec(int row){     if(row==N){       if(cnt<3){         FOR(i,0,N){ if(i>0) cout<<" "; cout<<shiid[i]+1; }         cout<<endl;       }       cnt++;     }     else       FOR(col,0,N)         if(!(VIS & 1<<col) && !(RDIA & 1<<(col-row+N)) && !(LDIA & 1<<(col+row))){           VIS|=1<<col;           RDIA|=1<<(col-row+N);           LDIA|=1<<(col+row);           shiid[row]=col;           rec(row+1);           VIS&=~(1<<col);           RDIA&=~(1<<(col-row+N));           LDIA&=~(1<<(col+row));         }} int main(){    freopen("checker.in","r",stdin);    freopen("checker.out","w",stdout);     cin>>N;    rec(0);    cout<<cnt<<endl;     //system("pause");    return 0;}`