【多校练习4签到题】HDU 4642—— Fliping game

来源:互联网 发布:php 数组 分组 avg 编辑:程序博客网 时间:2024/05/22 11:56

来源:点击打开链接

看上去很难,比赛的时候光看hehe了,也没有想。

但是仔细想想,是可以想出来的。一个棋盘上每个格子摆放一个硬币,硬币有正面1和反面0之分。现在两个人可以按照规则翻硬币,选择(x,y),要求(x,y)的硬币必须是正面,那么从(x,y)向右下角所有的硬币都被翻转。知道某个人无法翻(所有硬币都是反面)为止,这个人判输。

有一种特殊情况,那就是右下角,每次都被反转。

无论如何翻,如果右下角开始的是1,则Alice赢,反之后手赢。因为其他的硬币不论怎么翻,右下角的硬币永远是这样,所以其他的策略不重要。明白了这一点,这个题就水爆炸了。


#include <iostream>#include <cstring>#include <cstdio>#include <string>using namespace std;int mat[109][109];int main(){    int testcase;    cin>>testcase;    while(testcase--)    {        memset(mat,0,sizeof(mat));        int n,m;        cin>>n>>m;        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)                scanf("%d",&mat[i][j]);        }        if(mat[n-1][m-1]==1)            cout<<"Alice"<<endl;        else            cout<<"Bob"<<endl;    }    return 0;}