分析
-
本题的结论是:只需要考虑奇数台阶的石子,如果这些石子数量的异或值不为0,则先手必胜,否则先手必败。
-
证明:考虑 $a_1 \oplus a_3 \oplus a_5 \oplus … = x$,最后的必败态是全0,假设对手操作的是偶数台阶的石子,比如从第$k$阶阶梯向$k-1$阶阶梯($k$是偶数)拿$t$个石子,则我们从第$k - 1$阶阶梯向$k-2$阶阶梯($k$是偶数)拿$t$个石子下去,这样奇数台阶的石子没变,因此只需要考虑奇数台阶的石子即可。
-
如果 $x \neq 0$ 的话,通过上面的
Nim游戏
的原理分析(证明过程是一样的:网址),可知先手必胜。
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int res = 0;
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
if (i & 1) res ^= x;
}
if (res) puts("Yes");
else puts("No");
return 0;
}