CodeChef-DAILY : Daily Train
問題概要(適当)
全探索すれば解ける問題。
acceptされたコード
#include <cstdio> using namespace std; const int MAX_L = 54; char buf[MAX_L + 1]; int box[9][6]; int solve(){ int X, N; scanf("%d%d ", &X, &N); int ans = 0; for(int k=0; k<N; k++){ scanf(" %s ", buf); for(int j=0; j<9; j++){ for(int bit=0; bit<(1<<6); bit++)if(__builtin_popcount(bit) == X){ bool ok = true; for(int i=0; i<6; i++)if((bit>>i)&1){ ok &= buf[box[j][i]] == '0'; } if(ok){ ans++; } } } } return ans; } void prepare(){ int p[9] = {}; for(int i=0; i<36; i++){ box[i/4][p[i/4]++] = i; } for(int i=36; i<54; i++){ box[8-(i-36)/2][p[8-(i-36)/2]++] = i; } } int main(){ prepare(); printf("%d\n", solve()); return 0; }