集合-Nim游戏
作者:
amagi
,
2023-09-14 19:38:21
,
所有人可见
,
阅读 101
#include <iostream>
#include <cstring>
#include <unordered_set>
using namespace std;
const int N = 2e5;
int x[N],y[N];
int m,n;
int ss(int a){
if(y[a] != -1) return y[a];
unordered_set<int> op;
for(int i = 1; i <= m; i ++){
if(a >= x[i]) op.insert(ss(a - x[i]));
}
for(int i = 0; ; i ++) if(op.count(i) == 0) return y[a] = i;
}
void solve(){
cin >> m;
for(int i = 1; i <= m; i ++) cin >> x[i];
int res = 0;
memset(y,-1,sizeof y);
cin >> n;
for(int j = 1; j <= n; j ++){
int re;
cin >> re;
res ^= ss(re);
}
if(res) cout << "Yes" << "\n";
else cout << "No" << "\n";
}
int main(){
solve();
return 0;
}