完全模仿课件上做的 开始一直出错 应该是没有处理好 枚举的个数
代码很凌乱 方便调试用的
魔兽世界的终极版 还是放弃了 哎 遗憾 自己太懒了 现在不想花那么多时间来做一个题目
拿到证书还是拿不到 都随缘吧。。。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<vector<int> > start;
vector<vector<int> > draw;
int n;
bool success;
void output_start()
{
for(int i = 0; i <= n; ++i)
{
for(int j = 0; j <= n+1; ++j)
printf("%d ",start[i][j]);
printf("\n");
}
}
void output_draw()
{
for(int i = 0; i <= n; ++i)
{
for(int j = 0; j <= n+1; ++j)
printf("%d ",draw[i][j]);
printf("\n");
}
}
void clear_all()
{
for(int i = 0; i <= n; ++i)
{
for(int j = 0; j <= n+1; ++j)
{
start[i][j] = 0;
draw[i][j] = 0;
}
}
}
bool guess()
{
int c,r;
for(r = 1; r < n; ++r)
for(c = 1; c <= n; ++c)
draw[r+1][c] = (start[r][c] + draw[r][c-1] + draw[r][c] + draw[r][c+1] + draw[r-1][c]) % 2;
for(c = 1; c <= n ; ++c)
{
if( (draw[n][c-1] + draw[n][c] + draw[n][c+1] + draw[n-1][c]) % 2 != start[n][c] )
return false;
}
return true;
}
void enumerate()
{
int c;
//int num = 1;
for(int i = 0; i <= n+1; ++i)
draw[1][i] = 0;
while(1)
{
if(guess())
{
success = true;
break;
}
draw[1][1]++;
c = 1;
while(draw[1][c] > 1)
{
draw[1][c] = 0;
c++;
if(c > n)break;
draw[1][c]++;
}
//cout<<"c = " <<c<<endl;
if(c> n)break;
}
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out_my.txt","w",stdout);
int t;
scanf("%d",&t);
while(t--)
{
int sum = 0;
scanf("%d",&n);
start.clear();
draw.clear();
vector<int> tem;
success = false;
for(int i = 0; i <= n+1; ++i)
tem.push_back(0);
for(int i = 0; i <= n; ++i)
{
start.push_back(tem);
draw.push_back(tem);
}
//clear_all();
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
char c;
scanf("%c",&c);
if(c == 'y')
start[i][j] = 0;
else if(c == 'w')
start[i][j] = 1;
else --j;
}
for(int i = 1; i <= n ; ++i)
draw[1][i] = 0;
while(1)
{
if(guess())
{
success = true;
break;
}
int c = 1;
draw[1][1]++;
while(draw[1][c] > 1)
{
draw[1][c] = 0;
c++;
if(c > n)break;
draw[1][c]++;
}
if(c > n)break;
}
// cout<<"start:"<<endl;
// output_start();
// cout<<"draw:"<<endl;
// output_draw();
//enumerate();
if(!success) printf("inf\n");
else
{
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
if(draw[i][j])sum++;
}
printf("%d\n",sum);
}
}
return 0;
}