| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
H2O#include <iostream>
#include <stdio.h>
using namespace std;
int N;
int X[15][15];
int A[15][15];
int getAEntry(int x, int y){
if(x < 0 || x >= N || y < 0 || y >= N) return 0;
return A[x][y];
}
int main() {
int T;
scanf("%d", &T);
for(int ii = 0; ii < T; ii++){
scanf("%d", &N);
for(int i = 0; i < N; i++){
char s[16];
scanf("%s", s);
for(int j = 0; j < N; j++){
if(s[j] == 'y') X[i][j] = 0;
else X[i][j] = 1;
}
}
if(N == 1){
if(X[0][0] == 0) printf("0\n");
else printf("1\n");
continue;
}
int N2 = (1 << N);
int H2O = 2147483647;
for(int st = 0; st < N2; st++){
int cs = 0;
for(int i = 0; i < N; i++){
A[0][i] = ((st & (1 << i)) > 0) ? 1 : 0;
if(A[0][i]) cs ++;
}
for(int i = 1; i < N; i++){
for(int j = 0; j < N; j++){
A[i][j] = (X[i-1][j] + getAEntry(i-1, j-1) + getAEntry(i-1, j) + getAEntry(i-1, j+1) + getAEntry(i-2, j))%2;
if(A[i][j]) cs++;
}
}
bool keyi = 1;
for(int i = 0; i < N; i++){
if((X[N-1][i] + A[N-1][i] + getAEntry(N-1, i-1) + getAEntry(N-2, i) + getAEntry(N-1, i+1))%2 == 1){
keyi = 0;
break;
}
}
if(keyi && cs < H2O) H2O = cs;
}
if(H2O == 2147483647) printf("inf\n");
else printf("%d\n", H2O);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator