LightOJ - 1247 Matrix Game (Nim博弈)题解

题意:

给一个矩阵,每一次一个玩家可以从任意一行中选任意数量的格子并从中拿石头(但最后总数要大于等于1),问你谁赢

思路:

一开始以为只能一行拿一个...

将每一行石子数相加就转化为经典的Nim博弈

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
const int N = 100000+5;
const int INF = 0x3f3f3f3f;
using namespace std;
int main() {
    int T,m,n,a,Case = 1;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&m,&n);
        int ans = 0;
        for(int i = 0;i < m;i++){
            int sum = 0;
            for(int i = 0;i < n;i++){
                scanf("%d",&a);
                sum += a;
            }
            ans ^= sum;
        }
        if(ans == 0) printf("Case %d: Bob\n",Case++);
        else printf("Case %d: Alice\n",Case++);
    }
    return 0;
}


posted @ 2018-07-13 14:28  KirinSB  阅读(278)  评论(0编辑  收藏  举报