P4018 Roy&October之取石子

题目背景

Roy和October两人在玩一个取石子的游戏。

题目描述

游戏规则是这样的:共有n个石子,两人每次都只能取p^kpk个(p为质数,k为自然数,且p^kpk小于等于当前剩余石子数),谁取走最后一个石子,谁就赢了。

现在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。

(改编题)

乍一看像是博弈

其实数学归纳法也可以完成这个题目

我们来看下面的表格

棋子的个数 1 2 3 4 5 6 7 8 9
第一个人取得个数 1^1 2^1 3^1 2^2 5^1 2^2 1^1+2^1 2^1+2^1 3^1+2^1
第二个人取得个数 0 0 0 0 0 2^1 2^2 2^2 2^2

当棋子的个数小于等于6的时候,我们可以看到在1~5的时候全是第一个人赢,当n=6是第二个人赢,当7~11内我们可以将数拆成1~5内的一个数想让第一个人拿,然后余出个6,这样第二个人就不可能一次拿完,只能再让第一个人拿一次,这样第一个人必胜,当12时,第二个人赢、、、以此类推,我们可以发现,当n为6的倍数的时候,第二个人赢,其余情况均为第一个人赢

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int T,n;
int read()
{
    ,f=; char ch=getchar();
    ;ch=getchar();}
    +ch-',ch=getchar();
    return x*f;
}
int main()
{
    T=read();
    while(T--)
    {
        n=read();
        ==) printf("Roy wins!\n");
        else printf("October wins!\n");
    }
    ;
}

洛谷——P4018 Roy&October之取石子的更多相关文章

  1. 洛谷 P4018 Roy&October之取石子

    洛谷 P4018 Roy&October之取石子 题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取 p^kpk 个(p为质 ...

  2. 洛谷P4018 Roy&October之取石子

    题目背景 \(Roy\)和\(October\)两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有\(n\)个石子,两人每次都只能取\(p^k\)个(\(p\)为质数,\(k\)为自然数,且 ...

  3. 洛谷P4018 Roy&October之取石子 题解 博弈论

    题目链接:https://www.luogu.org/problem/P4018 首先碰到这道题目还是没有思路,于是寻思还是枚举找一找规律. 然后写了一下代码: #include <bits/s ...

  4. 洛谷P4860 Roy&October之取石子II 题解 博弈论

    题目链接:https://www.luogu.org/problem/P4860 和<P4018 Roy&October之取石子>一样的推导思路,去找循环节. 可以发现:只要不能被 ...

  5. P4018 Roy&October之取石子

    题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取 p^kpk 个(p为质数,k为自然数,且 p^kpk 小于等于当前剩余石子数), ...

  6. luogu P4018 Roy&October之取石子(博弈论)

    题意 题解 如果n是6的倍数,先手必败,否则先手必胜. 因为6*x一定不是pk 所以取得话会变成6*y+a的形式a=1,2,3,4,5: 然后a一定为质数.我们把a取完就又成为了6*x的形式. 又因为 ...

  7. 洛谷 Roy&October之取石子

    题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取pk 个(p为质数,k为自然数,且pk小于等于当前剩余石子数),谁取走最后一个石子 ...

  8. [luogu4018][Roy&October之取石子]

    题目链接 思路 这个题思路挺巧妙的. 情况一: 首先如果这堆石子的数量是1~5,那么肯定是先手赢.因为先手可以直接拿走这些石子.如果石子数量恰好是6,那么肯定是后手赢.因为先手无论怎样拿也无法直接拿走 ...

  9. [luogu4860][Roy&October之取石子II]

    题目链接 思路 这个题和上个题类似,仔细推一下就知道这个题是判断是否是4的倍数 代码 #include<cstdio> #include<iostream> #define f ...

随机推荐

  1. MSSQL Get Last Monday and Last Sunday

    获取上周的周一和周日 代码: --start of last week , ) --end of last week , )

  2. mvc Dapper_Report_Down_ExcelFile

    一.基于Aspose.Cells.Dapper导出Excel Dapper的Query返回要不是对象的IEnumerable,要不是Dynamic的IEnumerable,都不适合不用反射就能够动态获 ...

  3. android设计准则

    ------------缘由-------------------------------------------------------------------------------------- ...

  4. 【比赛】洛谷夏令营NOIP模拟赛

    Day1 第一题 水题 第二题 题意:一个n*m的字符矩阵从左上到右下,经过字符形成回文串的路径数.n≤500 回文串,考虑两段往中间DP. f[k][x][y]表示走了k步,左上点横坐标为x,右下点 ...

  5. .NET FrameWork 中的 CTS

    CTS:Common Type System 通用类型系统. 1.不仅可以把C#编译成.Net IL,还支持Basic.Python.Ruby等语言,甚至还支持Java.不同语言中的数据类型定义是不一 ...

  6. Java并发—— 关键字volatile解析

    简述 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,当一个变量定义为volatile,它具有内存可见性以及禁止指令重排序两大特性,为了更好地了解volatile关键字,我们可以 ...

  7. C#读取txt文件时中文乱码

    解决办法 使用GB2312中文字符集 StreamReader reader = new StreamReader(txtUrl, Encoding.GetEncoding("gb2312& ...

  8. input placeholder 兼容问题

    placeholder是html5出的新特性,ie9以下是不兼容的, 那么为了兼容ie9  我们需要对他做处理 //jq的处理方式$(function(){ jQuery('[placeholder] ...

  9. javascript中数据属性与访问器属性

    1.数据属性 Configurable:true|false,表示能否通过delete将属性删除,默认为true.当把属性的Configurable设置为false后,该属性不能通过delete删除, ...

  10. MySQL当中的case when then

    其实就相当于if else:而且也可以用if来替代. case whent 条件1 then 条件2 else 条件3 end; 如果条件1成立就执行条件2否则执行条件3 mysql ) end; + ...