Acwing 891. Nim游戏

给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。

问如果两人都采用最优策略,先手是否必胜。

输入格式

第一行包含整数n。

第二行包含n个数字,其中第 i 个数字表示第 i 堆石子的数量。

输出格式

如果先手方必胜,则输出“Yes”。

否则,输出“No”。

数据范围

1≤n≤10^5,
1≤每堆石子数≤10^9

输入样例:

2
2 3

输出样例:

Yes
1. 如果每一堆都是0的话,就是一个必败态(因为他没法拿石子了)  所谓必败态就是这种状态轮到给谁,谁就必败。

2. 如果是一个必胜态,那么一定可以通过从一堆中拿取一定的石子从而将必胜态转为必态并将此必败态移交给对手.

3,如果是一个必败态,无论怎么操作之后必败态都将转化成必胜态并且将此必胜态转给对手。

4. 因此如果最开始的时候是必胜态那么先手必胜 如果最开始的时候是必败态那么先手必败

5. 必胜态是指石子数量异或不为0 必败态是指石子数量异或为0
#include<iostream>
using namespace std;
int main(){
    int n;
    int res = 0;
    int c;
    cin>>n;
    while(n--){
        scanf("%d",&c);
        res = res ^ c;
    }
    if (res == 0)
        puts("No");
    else puts("Yes");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值