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

来源:点击打开链接

看上去很难,比赛的时候光看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;
}


 

 

posted @ 2013-08-04 20:53  javawebsoa  Views(185)  Comments(0Edit  收藏  举报