BNU 12889 Alice and Bob

1 篇文章 0 订阅

Alice and Bob

30000ms
1000ms
65536KB

 

我不知道Alice和Bob到底发展到了哪一阶段,就像我不知道李雷最后有没有负了韩梅梅,同样的我也不知道奶牛Bessie是否逃出了Farmer John魔爪。撇开这些八卦不说,取石子游戏绝对是一款风靡ACM界的经典游戏,虽然我完全无法理解为什么每次Alice和Bob都能找到最佳策略却还对这种开玩之前就知道结果的游戏这么有兴趣……

好吧…今天这二位又开始玩了……

现在有一个N*M的棋盘,棋盘每个格子上都有着若干块石子。Alice和Bob轮流进行游戏,每次进行游戏的一方需要选择一个非空的格子,然后从这个格子中拿走任意数量(但不能为零)的石子,然后将拿走的石子全部放到这个格子的右上或右下的格子中(二选一)。即是说将石子从(x,y)移到(x+1,y+1)或(x-1,y+1)。若要移到的格子在棋盘之外,则这一步操作为非法操作,需重新选格子进行操作。当有人无法做出合法操作时游戏结束,不能移动的一方输掉比赛。每次由Alice先进行操作。现在给出棋盘的初始状态,假设双方都采取最好的策略,问谁将赢得游戏。

 

Input

输入的第一行为两个正整数N和M(1≤N*M≤50000)。接下来的N行每行M个非负整数表示初始时这个格子上的石子数(每个数都在128以内)。

Output

 

输出"Alice"或"Bob"表示游戏获胜的一方。

Sample Input

2 2
2 2
1 2

Sample Output

Alice

Source

Author

temperlsyer


      必胜列                        必败列(m-1)
  
  
  
可以很清晰的找到一些特殊的情况,比如n==1和m==1的情况,很明显,这种情况游戏完全无法发生,所以Bob赢
接下来,可以发现,在m-1列,也就是最后一列,如果有人(不管是alice还是Bob,只关注当前的先手)那么肯定输了,因为根本不能走啊~
同样的,那m-2列,必定可以,而且只可以,走到下一列,也就是必定能走,那么,对每一个单独的格子而言,必胜。
所以,同样的,只需要考虑每一个m-2,m-4,.....接下来跟NIM就差不多了~
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
int main()
{
    int n,m;
    int x;
    while(cin>>n>>m)
    {
        if(n==1||m==1)
        {
            for(int i=0;i<n;i++)
            for(int i=0;i<m;i++)
            scanf("%d",&x);
            printf("Bob\n");
        }
        else
        {
            int f=0;
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    scanf("%d",&x);
                    if((m-j)%2==0)
                    {     
                      f^=x;
 
                    }
                }
            }
            if(f)
            printf("Alice\n");
            else
            printf("Bob\n");
        }
    }

    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值