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; }