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;
}
查看12道真题和解析