题目背景
(Roy)和(October)两人在玩一个取石子的游戏。
题目描述
游戏规则是这样的:共有(n)个石子,两人每次都只能取(p^k)个((p)为质数,(k)为自然数,且(p^k)小于等于当前剩余石子数),谁取走最后一个石子,谁就赢了。
现在(October)先取,问她有没有必胜策略。
若她有必胜策略,输出一行"(October wins!)";否则输出一行"(Roy wins!)"。
输入输出格式
输入格式:
第一行一个正整数T,表示测试点组数。
第(2)行~第((T+1))行,一行一个正整数(n),表示石子个数。
输出格式:
(T)行,每行分别为"(October wins!)"或"(Roy wins!)"。
输入输出样例
输入样例#1:
3
4
9
14
输出样例#1:
October wins!
October wins!
October wins!
说明
对于(30\%)的数据,(1<=n<=30);
对于(60\%)的数据,(1<=n<=1,000,000);
对于(100\%)的数据,(1<=n<=50,000,000,1<=T<=100,000)。
(改编题)
思路:被洛谷标签给骗了,不知道为什么这道题的标签是(prim),本来是想练最小生成树,看数据范围,根本不可做,而且……也没法建边啊,洛谷标签真的是……不过点进来了,就做做吧,发现这其实就是个打表题,如果输入的(n)模(6)值为(0),就是先手必败态,否则为先手必胜态。
代码:
#include<cstdio>
using namespace std;
int t,n;
int main() {
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
if(n%6) printf("October wins!
");
else printf("Roy wins!
");
}
return 0;
}