洛谷p4018题解
题目背景
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≤106;
对于 100% 的数据,1≤n≤5×107, 1≤T≤105。
(改编题)
思路:
经过人类智慧,我们发现不是6的倍数October就赢了。
每次,两个人可以选择取1~5的数,所以,如果剩下6个,第二个人有必胜策略,同理,如果剩下6n个,第二个人有必胜策略,如果剩下的不是6的倍数,第一个人可以画一步把剩下的数变成6的倍数,从而有必胜策略。
所以,如果一开始为6n,那么roy wins,否则october wins。
Code:
这你也要抄?
#include <bits/stdc++.h>
using namespace std;
int main(){int n,x;cin>>n;while(n--){cin>>x;if(x%6==0) cout<<"Roy wins!\n";else cout<<"October wins!\n";}
}