题目链接:https://www.luogu.org/problem/P4018

首先碰到这道题目还是没有思路,于是寻思还是枚举找一找规律。

然后写了一下代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 101;
bool win[maxn];
bool isp(int a) {
if (a < 2) return false;
for (int i = 2; i * i <= a; i ++)
if (a % i == 0)
return false;
return true;
}
void check(int n) {
win[n] = false;
if (!win[n-1]) {
win[n] = true;
return;
}
for (int p = 2; p <= n; p ++) {
if (!isp(p)) continue;
for (int q = 1; q <= n; q *= p) {
if (win[n-q] == false) {
win[n] = true;
return;
}
}
}
}
int main() {
for (int i = 1; i < maxn; i ++) {
check(i);
printf("check (%d) ", i);
puts(win[i] ? "YES" : "NO");
}
}

输出结果如下:

check (1) YES
check (2) YES
check (3) YES
check (4) YES
check (5) YES
check (6) NO
check (7) YES
check (8) YES
check (9) YES
check (10) YES
check (11) YES
check (12) NO
check (13) YES
check (14) YES
check (15) YES
check (16) YES
check (17) YES
check (18) NO
check (19) YES
check (20) YES
check (21) YES
check (22) YES
check (23) YES
check (24) NO
check (25) YES
check (26) YES
check (27) YES
check (28) YES
check (29) YES
check (30) NO
check (31) YES
check (32) YES
check (33) YES
check (34) YES
check (35) YES
check (36) NO
check (37) YES
check (38) YES
check (39) YES
check (40) YES
check (41) YES
check (42) NO
check (43) YES
check (44) YES
check (45) YES
check (46) YES
check (47) YES
check (48) NO
check (49) YES
check (50) YES
check (51) YES
check (52) YES
check (53) YES
check (54) NO
check (55) YES
check (56) YES
check (57) YES
check (58) YES
check (59) YES
check (60) NO
check (61) YES
check (62) YES
check (63) YES
check (64) YES
check (65) YES
check (66) NO
check (67) YES
check (68) YES
check (69) YES
check (70) YES
check (71) YES
check (72) NO
check (73) YES
check (74) YES
check (75) YES
check (76) YES
check (77) YES
check (78) NO
check (79) YES
check (80) YES
check (81) YES
check (82) YES
check (83) YES
check (84) NO
check (85) YES
check (86) YES
check (87) YES
check (88) YES
check (89) YES
check (90) NO
check (91) YES
check (92) YES
check (93) YES
check (94) YES
check (95) YES
check (96) NO
check (97) YES
check (98) YES
check (99) YES
check (100) YES

发现只要不是 \(6\) 的倍数就是必胜态,只要是能被 \(6\) 整除就是必败态。

找到规律之后编写如下代码AC:

#include <bits/stdc++.h>
using namespace std;
int T, n;
int main() {
cin >> T;
while (T --) {
cin >> n;
puts( n % 6 ? "October wins!" :"Roy wins!" );
}
return 0;
}

然后来证明:

首先我们知道,所有 \(6^k\)(其中 \(k\) 为任意自然数)都不会是 \(p^k\) (其中 \(p\) 是素数)。

然后我们假设前 \(6 \times n\) 个状态已经确定了,并且所有的 \(6\) 的倍数都是必败态,其它状态都是必胜态。

然后因为 \(6n+1, 6n+2, 6n+3, 6n+4, 6n+5\) 都可以转换到必败态 \(6n\) ,所以这5个都是必胜态。

而 \(6n+6\) 不能转换到 \(6n, 6n-6, \dots 6, 0\) ,所以 \(6n+6\) 无论如何取都只能达到必胜态,所以 \(6n+6\) 就是必败态。

综上所述:所有 \(6\) 的倍数都是必败态,其他状态都是必胜态。

洛谷P4018 Roy&October之取石子 题解 博弈论的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. P4018 Roy&October之取石子

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

  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. 【模板】Vector存图 + SPFA

    最近愉快地决定要由边集数组转向Vector存图,顺便开始图论集训 老惯例,以题写模板 P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texa ...

  2. 传统保险企业基于 Dubbo 的微服务实践

    本文整理自中国人寿保险(海外)股份有限公司深圳中心技术总监家黄晓彬在 Dubbo 社区开发者日深圳站的现场分享. 中国人寿保险(海外)股份有限公司负责香港.澳门.新加坡和印尼的业务开发,和国内业务不同 ...

  3. golang字符串常用系统函数

  4. Google搜索技巧-入门篇

    基本搜索 Google 查询简洁方便,仅需输入查询内容并敲一下回车键 (Enter),或单击“Google 搜索”按钮即可得到相关资料. 搜索两个及两个以上关键字 Google 只会返回那些符合您的全 ...

  5. SDUT-3378_数据结构实验之查找六:顺序查找

    数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...

  6. CSS3--关于z-index不生效问题

    最近写CSS3和js结合,遇到了很多次z-index不生效的情况: 1.在用z-index的时候,该元素没有定位(static定位除外) 2.在有定位的情况下,该元素的z-index没有生效,是因为该 ...

  7. 大数据ETL详解

    ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更 ...

  8. CentOS8.0-1905安装配置ftp服务器

    关键词:CentOS8/RHEL8;安装配置FTP/安装配置VSFTPD;被动模式/PASV##CentOS8.0-1905发布后,尝试将FTP服务器迁移至新版本的CentOS中,但是测试过程中,在防 ...

  9. 寒哥带你深入了解下Swift中的Value Type

    http://www.cocoachina.com/swift/20150923/13539.html 关于开发到底使用ValueType 值类型还是Reference Type 引用类型,关于这个, ...

  10. 跟我一起安装jenkins

    查看java版本 查看brew版本 升级 java brew cask install java 安装 jenkins brew install jenkins 执行 java -jar /usr/l ...