洛谷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";
    }
}

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值