题目链接: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\) 的倍数都是必败态,其他状态都是必胜态。

最新文章

  1. webbench之编译安装(一)
  2. ERROR actor.OneForOneStrategy: org.apache.spark.SparkContext
  3. [转]Eclipse中的Web项目自动部署到Tomcat
  4. [Tool] 使用Sublime Text开发Objective-C
  5. 命令行参数(argc, argv)
  6. Objective C静态代码扫描和代码质量管理 OClint + SonarQube
  7. MySQL与mabits大小比较、日期比较示例
  8. EC读书笔记系列之19:条款49、50、51、52
  9. hnnu 11546 Sum of f(x) (求一个数的全部约数和)
  10. 前端面试题之css
  11. Kafka消费者-从Kafka读取数据
  12. nginx漏洞分析与升级修复
  13. 利用图片的灰度平均值来进行分类实现手写图片识别(数据集50000张图片)——Jason niu
  14. ASP.NET之使用Ajax实现页面异步刷新(无需刷新整个页面)
  15. Android之微信布局篇
  16. 关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
  17. jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
  18. Qt 之 模态、非模态、半模态窗口的介绍及 实现QDialog的exec()方法
  19. 20155326《Java程序设计》实验一实验报告
  20. JSON与XML的区别比较(转)

热门文章

  1. 解决安装编译工具gcc后无法连接mysql
  2. 26718汉字,gbk是23940个汉字,gb18030有76556个汉字
  3. select @@identity的用法 转
  4. iOS Status Bar变换
  5. VisualVM介绍使用
  6. 怎么在 CentOS 6 上配置私有 NPM 仓库?
  7. 移动web的基础知识
  8. 笔记:OSAL st 宏学习 do { x } while (__LINE__ == -1)
  9. linux cat /etc/passwd 说明
  10. Laravel 发送邮件(最简单的讲解!)