XDOJ1162 - 超级矿工

Description

 Rusty 小姐与Drill 先生是两名超级矿工,他们在一个矿点中采矿,矿点里面有N堆矿物,他们的任务是把矿物运到门口的传送车,让传送车把矿物运回地面。矿物堆根据离门口由近到远,编号为1 2 3 ……..单纯的搬运矿物很无聊,所以Rusty和Drill准备来一场“超级矿工”的比赛。规则为:Rusty和Drill轮流搬运矿物,每一次必须在任意一个矿物堆上面,把一定重量的矿物(至少1KG)搬到前一个离门口更近的矿物堆之中。最后没有矿物可以搬的人输。赢者可以获得“超级矿工”的称号

基于“Lady First”原则,Rusty小姐是先手(第一个开始搬运矿物的人),给出每个矿物堆的总重量,判断Rusty是否存在必胜策略

Input

第一行一个整数N,代表共有N组测试数据
每组测试数据两行
每组数据的第一行是整数n,代表有n个矿物堆 (1<n<40)
第二行是n个整数a1,a2,a3……..an.代表着离门口距离由近到远的这N个矿物堆,每一个的重量。

Output

如果Rusty存在必胜策略,那么输出“YES”,否则输出“NO”

Sample Input

1
6
1 3 2 4 3 5

Sample Output

NO

解题思路:

Nim博弈问题,对于这个题,从第1堆到第n堆,所有奇数堆的重量全部异或,0则先取必败,非0则先取必胜。

 

#include<iostream>

using namespace std;

int main()
{
    int N;
    cin>>N;
    while(N--)
    {
        int n;
        cin>>n;
        int ans  = 0;
        for(int i=0;i<n;++i)
        {
            int t = 0;
            cin>>t;
            if(i%2==0)
                ans ^= t;
        }
        if(ans==0)
            cout<<"NO"<<endl;
        else
            cout<<"YES"<<endl;
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值