https://scut.online/p/290 一个 N 个数的取数游戏,Kaildls 和 Parco 轮流操作,每次操作从 N 个数中取一个数 y 并把他变成 y-x(满足 x | y 且x < y),无法操作的人输. 假设 Kaildls 先手且两人都是用最优策略,请问最后谁会赢? 第一次学SG函数,要找的是每次能从石子堆中取走的数目,记录下来. 最后的Nim和为0是后手赢? #include<bits/stdc++.h> using namespace std; #defin…
题面 题面 题解 这题的思路比较特别,观察到我们的每次操作实质上是对于一颗豆子的操作,而不是对一瓶豆子的操作,因此我们要把每颗豆子当做一个独立的游戏,而它所在的瓶子代表了它的SG值. 瓶子数量很少,因此我们只需要枚举每个豆子的后继状态暴力转移即可 #include<bits/stdc++.h> using namespace std; #define R register int #define AC 30 int T, n, ans, rnt; int s[AC], sg[AC]; bool…
思路: N 为1或质数 先手必赢 N 为质数X质数的积 后手必赢 先手取两个质数的积则赢 #include #include #define ll long long using namespace std; int main() { int n; cin>>n; while(n--) { ll num; int a=0; int b=1; int c=1; cin>>num; for(ll i=2;i*i…