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;
}
posted @ 2020-09-07 14:43  Kersen  阅读(104)  评论(0编辑  收藏  举报