P4860 Roy&October之取石子II
题目分析
传送门
我们设石子数为 n。
当 n=0 时,显然先手必败。
当 n=1,2,3 时, 直接拿走, 先手必胜。
当 n=4 时,只能拿走1、2、 3, 会剩下3、2、1,先手必败。
当 n=5,6,7 时,我们可以分别拿走1, 2, 3个, 让后手面对 n=4 的情况, 也就是说后手必败,先手必胜。
当 n=8 时,我们无论怎么取都会取到必胜点,所以这个点为必败点。
这样应该很显然了。
对于 \(n \leq 3\) 的情况可以直接算。
当 \(n = 4k, k \in \mathbb Z\) 时,根据哥德巴赫猜想,任一大于2的偶数都可写成两个素数之和。
你取走一个质数之后,剩下的还是一个质数,所以这是个必败点。
当 \(n = 4k + 1, 4k + 2, 4k + 3\) 时,可以一步转化为上述情况,因此这是一个必胜点。
code
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 100010
#define M 1010
using namespace std;
int read() {
int s = 0, f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar();
return f ? -s : s;
}
int main() {
int T = read();
while (T--) {
int a = read();
if (a <= 3) {
puts("October wins!");
continue;
}
if (a % 4 == 0) puts("Roy wins!");
else puts("October wins!");
}
return 0;
}