和显然,这个问题就是博弈论中十分经典的 Nim 取子问题
。首先我们发现,对于一种状态,如果后面的任何状态都是必败状态,那么我们可以发现,这个状态就是我们常说的必胜态,因为,无论下一步怎么走,都是无法获胜。而同时,如果一个状态后面有必胜态,那么这个状态就是必败态,因为我们下一步的人可以执行最优策略到达这个必胜态。
booldfs(int x, int left, int right){ if (x == 0 || x < left) { returnfalse; } if (left <= x && x <= right) { returntrue; } bool p = true; for (int i = left; i <= right; i++) { if (x - i >= 0) { p &= dfs(x - i, left, right); } } return !p; }
signedmain(){ cin >> t; while (t--) { cin >> n >> l >> r; cout << (dfs(n, l, r) ? "yes\n" : "no\n"); } }
booldfs(int x, int left, int right){ if (x == 0 || x < left) { returnfalse; } if (left <= x && x <= right) { returntrue; } bool p = true; for (int i = left; i <= right; i++) { if (x - i >= 0) { p &= dfs(x - i, left, right); } } return !p; }
signedmain(){ cin >> t; while (t--) { cin >> n >> l >> r; n %= (l + r); cout << (dfs(n, l, r) ? "yes\n" : "no\n"); } }