一、Nim博弈
P2197 【模板】nim 游戏
1.异或
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
inline int read(){
int a=0,k=1;
char ch=233;
while(ch<'0'||ch>'9'){
if(ch=='-') k=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
a=a*10+ch-'0';
ch=getchar();
}
return a*k;
}
inline void write(int x){
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
}
int n,T,v,ans;
int main(){
T=read();
while(T--){
ans=0;
n=read();
for(int i=1;i<=n;i++){
v=read();
ans^=v;
}
if(ans) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
二、威佐夫博弈
P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
long long n,m,w;
int jud;
int main(){
scanf("%lld%lld",&n,&m);
if(m>n) swap(n,m);
w=n-m;
jud=(int)(((sqrt(5.0)+1.0)/2.0)*w);
if(jud==m) cout<<"0";
else cout<<"1";
return 0;
}