题意:Alice和Bob玩游戏,一个N * M的矩阵,里面是1或0,每人每次选择一个1的位置,然后将这个位置到右下角的整个矩形元素全部取反(1变0,0变1),最后不反操作(没有1)的人输,Alice先行(1 <= N, M <= 100),输出胜者。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4642
——>>每个人,无论他选择哪个位置的1,他的操作一定会触动右下角最后一个元素的状态翻转,所以,答案出来啦。。。
因为胜者最后一步一定是将所有的格子变成0,假设最后一个元素是1,每一次翻转,Alice都会将最后一个元素变成0,而Bob每一次都会将最后一个元素变成1,最后也就会是Alice胜;假设最后一个元素是0,每一次翻转,Alice都会将最后一个元素变成1,而Bob每一次都会将最后一个元素变成0,最后也就会是Bob胜。
所以,Alice的输赢取决于最后一个元素,是1就赢,是0就输。
#include <cstdio>
using namespace std;
int main()
{
int T, N, M, a, i, j;
scanf("%d", &T);
while(T--){
scanf("%d%d", &N, &M);
for(i = 0; i < N; i++)
for(j = 0; j < M; j++)
scanf("%d", &a);
if(a == 1) printf("Alice\n");
else printf("Bob\n");
}
return 0;
}