E-棋技哥:
博弈论。
一开始想的是用一个前缀和去记录每个位置的翻转次数,来决定是否翻转。从最右下角开始。
看了题解后才知道可以直接判断第一行第一个位置的棋子的状态。
为1,则输出call;为0,则输出aoligei。
因为无论翻转哪一个棋子,都会影响这个棋子的状态。所以,当这个棋子的初始状态为1时,必然要用奇数次的翻转才能把全部棋子翻转成白色。为0时,同理。
#include <bits/stdc++.h>
using namespace std;
const int N=505;
char pic[N][N];
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",pic[i]+1);
if(pic[1][1]=='1')
printf("call\n");
else
printf("aoligei\n");
}
return 0;
}