CodeChef submission 130299 (C++ 4.0.0-8) plaintext list. Status: AC, problem J1, contest NOV09. By syco (Varun Jalan), 2009-11-11 04:48:07.
#include<iostream> using namespace std ; char in[10][10] ; int bit[1<<9],d1,d2,mrow[9],mcol[9],mbox[3][3] ; bool solve() { int i,j,k,x = -1,y = -1,p = 10,mask ; for(i=0;i<9;i++) for(j=0;j<9;j++) if(in[i][j] == '.') { mask = mrow[i] | mcol[j] | mbox[i/3][j/3] | (i == j ? d1 : 0) | (i == 8 - j ? d2 : 0) ; int rem = 9 - bit[mask] ; if(rem < p) p = rem,x = i,y = j ; } if(p == 0) return false ; if(p == 10) return true ; mask = mrow[x] | mcol[y] | mbox[x/3][y/3] | (x == y ? d1 : 0) | (x == 8 - y ? d2 : 0) ; for(i=0;i<9;i++) if(!(mask&1<<i)) { if(x == y) d1 ^= 1 << i ; if(x == 8 - y) d2 ^= 1 << i ; mrow[x] |= 1 << i ; mcol[y] |= 1 << i ; mbox[x/3][y/3] |= 1 << i ; in[x][y] = '1' + i ; if(solve()) return true ; if(x == y) d1 ^= 1 << i ; if(x == 8 - y) d2 ^= 1 << i ; mrow[x] ^= 1 << i ; mcol[y] ^= 1 << i ; mbox[x/3][y/3] ^= 1 << i ; in[x][y] = '.' ; } return false ; } main() { int i,j,k,runs ; for(i=1;i<1<<9;i++) bit[i] = bit[i>>1] + (i&1) ; // freopen("in.txt","r",stdin) ; while(runs--) { d1 = d2 = 0 ; for(i=0;i<9;i++) for(j=0;j<9;j++) if(in[i][j] != '.') { if(i == j) d1 |= 1 << (in[i][j] - '1') ; if(i == 8 - j) d2 |= 1 << (in[i][j] - '1') ; mrow[i] |= 1 << (in[i][j] - '1') ; mcol[j] |= 1 << (in[i][j] - '1') ; mbox[i/3][j/3] |= 1 << (in[i][j] - '1') ; } solve() ; } // while(1) ; }
Comments

