nim博弈(模板)

题目

nim博弈模型:两个人对同一个集合操作(加或减),最少加1或减1。此题为nim博弈的模型,因为其操作对象是同一系列的石子;而非模型的有:象棋,因为两个人各自操作一方,并非同一个集合
nim博弈结论:a1^a2^a3^...an != 0 则a赢(先手赢); =0则b赢

必败状态,任意一次操作,即可变成必胜状态
必胜状态,存在一次操作,变成必败状态

想要学好博弈论去了解sg函数吧

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const N=1e5+7;
int n,k,z;
int a[N];
int main(){
    cin >> n >> k;
    for(int i=1;i<=n;++i){
        cin >> a[i];
        z^=a[i];
    }
    if(z!=0){
        cout << "YES" ;return 0;
    }
    for(int i=1;i<=n;++i){
        if(a[i] < k) continue;
        if( z^a[i]^(a[i]-k) ){
            cout << "YES";
            return 0;
        }
    }
    cout << "NO";
    return 0;
}
全部评论

相关推荐

在debug的柠檬精很迷人:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务