题目

传送门 to CF

题目概要
一个博弈游戏,只有一个数字。两人轮流操作,每次可以将当前的数字 n 0 n_0 n0​ 减去它的因数 d ( d ≠ 1 ∧ d ≠ n 0 ) d\;(d\ne 1\wedge d\ne n_0) d(d​=1∧d​=n0​),不能操作者输。

问,最初数字是 n n n 时,先手是否有必胜策略。

数据范围与提示
共 1 0 4 10^4 104 组数据,每组数据 1 ≤ n ≤ 1 0 9 1\le n\le 10^9 1≤n≤109 。

思路

没有什么好的想法,干脆打了个表。震惊地发现,所有奇数都是先手必败!几乎所有偶数都是先手必胜!

为啥是几乎呢?因为我看到 n = 2 n=2 n=2 和 n = 8 n=8 n=8 是先手必败。于是我就这样交了一发,咋 W A \tt WA WA 了?

回来重新看了看表。啊咧咧!竟然 512 512 512 也是先手必败?再翻翻,怎么 32 32 32 也要出事儿?然后 128 128 128 也是反常情形?

好像 2 × 4 k 2\times 4^k 2×4k 都是先手必败诶!好,把这个结论补上去。 n n n 为奇数或者 n = 2 × 4 k n=2\times 4^k n=2×4k 先手必败,否则先手必胜。交一发,过了。

知道结论之后的证明,非常简单,归纳法即可,但是不容易直接想到。现在我们开始归纳法:

  • n n n 是奇数。若 n n n 为质数,直接输掉。否则,它的因子都是奇数,于是后继状态都是偶数。并且它的后继状态不是 2 k 2^k 2k,因为 n 0 − d n_0-d n0​−d 仍然是 d d d 的倍数,而 d d d 是一个奇因子。所以后继状态都是先手必胜。得证。
  • n ≠ 2 k n\ne 2^k n​=2k 但是 n n n 为偶数。显然 n n n 不是质数,并且至少有一个奇因子。那么 n n n 减去这个奇因子,就得到了一个先手必败的后继。得证。
  • n = 2 k n=2^k n=2k 。若 k k k 为偶数,即 n = 4 k / 2 n=4^{k/2} n=4k/2,那么其存在后继状态 n 0 = 2 k − 1 n_0=2^{k-1} n0​=2k−1 是先手必败。若 k k k 为奇数,那么其后继 n 0 = 2 k − 1 n_0=2^{k-1} n0​=2k−1 和其他偶数都是先手必胜。得证。

世上只有打表好! O ( T log ⁡ n ) \mathcal O(T\log n) O(Tlogn) 没烦恼!

代码

#include <cstdio>
using namespace std;
inline int readint(){int a = 0; char c = getchar(), f = 1;for(; c<'0'||c>'9'; c=getchar())if(c == '-') f = -f;for(; '0'<=c&&c<='9'; c=getchar())a = (a<<3)+(a<<1)+(c^48);return a*f;
}int logtwo(int x){for(int i=0; true; ++i)if((1<<i) >= x)return i;return -1;
}
int main(){for(int T=readint(); T; --T){int n = readint();if((n&-n) == n && (logtwo(n)&1))puts("Bob");else if(n&1) puts("Bob");else puts("Alice");}return 0;
}

[CF1537D]Deleting Divisors相关推荐

  1. Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈

    传送门 文章目录 题意: 思路: 题意: 给你一个数nnn,有两个人博弈,每次可以将nnn减去一个nnn的因子,这个因子不能为111或nnn.当不能操作的人输掉游戏.问你先手赢还是后手赢. 思路: 这 ...

  2. D. Deleting Divisors

    传送门:CF 题目如下: 前言: 显而易见,这题是一道博弈题. 初解此题大致思路和标答一致,但还是没有想的很清楚,所以还是没有过. 思路: 在做博弈题的时候,一定要想清楚必胜条件. 这题的必胜条件很明 ...

  3. D. Deleting Divisors(博弈)

    Problem - D - Codeforces 爱丽丝和鲍勃在玩游戏.它们从一个正整数n开始,轮流对其进行操作.玩家每回合可以从n中减去一个不是1或n的除数.在他/她的回合中不能移动的玩家失败.爱丽 ...

  4. [CF/AT/Luogu]各大网站网赛 爆肝部部长工作报告文件Ⅱ

    文章目录 CodeForces LATOKEN-Round-1(Div.1+Div.2) A. Colour the Flag B. Histogram Ugliness C. Little Alaw ...

  5. 博弈论 1.Introduction(组合游戏基本概念、对抗搜索、Bash游戏、Nim游戏)

    1.博弈 博弈论是研究具有斗争或竞争性质现象的数学理论和方法. 每个玩家都有一个偏好,A一般是希望A赢,如果不可以的话就倾向于 平局,B一般倾向B赢,达不到的话就倾向于平局.他们的每一步组成了一个&q ...

  6. 东北大学程序设计夏令营博弈论与构造

    博弈与构造专题 本次训练包含题目 Problem A Matches Game Problem B Georgia and Bob Problem C Deleting Divisors Proble ...

  7. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

  8. OpenStack虚拟机删除后停在deleting无法正常删除

    公司环境中批量删除虚拟机的过程中出现某些虚拟机无法正常删除,任务状态显示删除中但是虚拟无法删除. 通过查询相关文章(下文转载)发现应该是instances row中键值未更新错误导致,但是按照操作云主 ...

  9. UVA 294 - Divisors (唯一分解)

    题目链接 https://cn.vjudge.net/problem/UVA-294 [题意] 输入两个整数L,R(1<=L,R<=1e9,U-L<=10000)统计区间 [L,U] ...

最新文章

  1. Windows同时安装python3.0和python2.7
  2. 用命令行编译java并生成可执行的jar包
  3. Ant build.xml程序简单说明
  4. Java中String 和StringBuffer的区别
  5. 如何更改计算机性能,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...
  6. 40万总奖金!顶级云服务免费用!2021全球高性能云计算创新大赛报名中!
  7. poj3164(最小树形图朱刘算法模板)
  8. 比赛结果预测_决策树_随机森林(通用 数据挖掘入门与实践-实验5)
  9. layui js添加html,layui.js如何声明全局变量?
  10. Java EE并发API教程
  11. Lnmp环境安装禅道项目管理软件
  12. word里面用mathtype编辑公式转成PDF后出现乱码
  13. C++ const型成员函数与 non-const型成员函数
  14. Python可视化库
  15. Tesseract OCR iOS 教程
  16. 读《从零开始学理财》
  17. 网站banner怎样设计才能提高吸引力?
  18. The slave I/O thread stops because master and slave have equal MySQL server UUID
  19. org.apache.flink.shaded.guava18.com.google.common.util.concurrent.ThreadFactoryBuilder 真实解决方案
  20. 24款神级插件,让你的 vscode更牛

热门文章

  1. CTF MICS笔记总结
  2. 2020.08.05狂人日记:C#计时器与串口通信
  3. 从ReentrantLock角度解析AQS
  4. 什么是边缘计算?它是怎样火起来的?终于有人讲明白了
  5. PowerPro 超级大PK 之挑战群魔系列:
  6. python socketio例子_Python socket.SocketIO方法代碼示例
  7. 为什么产品经理的工资不能够比程序员高?
  8. 万年历查询java项目查询,Java日历查询程序(万年历)
  9. 那种“不劳而获”赚钱的方法或许真的有
  10. 5 Redis缓存穿透、击穿、雪崩、分布式锁、布隆过滤器