博弈论练习6 Deleting Divisors(sg找规律,思维)
题目链接在这里:G-Deleting Divisors_牛客竞赛博弈专题班组合游戏基本概念、对抗搜索、Bash游戏、Nim游戏习题 (nowcoder.com)
这道题一道比较明显的思路是使用sg函数,因为可以看到比较明显的一个状态推到另一个状态的过程。在考场上的话应该想到的是通过sg函数打表找规律来做。
1 #include "bits/stdc++.h"
2 using namespace std;
3 const int MAX=100005;
4 int n;
5 int sg[MAX];
6 int main(){
7 int i,j;
8 memset(sg,0,sizeof(sg));
9 for (i=2;i<=1000;i++)
10 for (j=2;j*j<=i;j++)
11 if (i%j==0){
12 if (sg[i-j]==0 || sg[i-i/j]==0)
13 sg[i]=1;
14 }
15 for (i=1;i<=1000;i++)
16 cout<<i<<" : "<<sg[i]<<endl;
17 return 0;
18 }
下面是正解:
通过分解质因数然后观察可以看出这个和奇偶性是有关系的,我们就来考虑两种状态:
1. 如果当前数为一个奇数,那么它的所有因子一定是奇数,所以它减掉一个因子一定是一个偶数,即它的下一状态要么是已经寄了,要么是第二状态。
2. 如果当前数是一个偶数,并且不为2的次幂,那么它一定能转成第一状态,因为假设当前数为m*2^k,那么我们减去一个m,剩下的数必定为m*(2^k-1),两个奇数相乘必定是奇数。
综上,我们看到,在2状态下必胜,只有在1状态下在会输。
现在我们来看一下2的次幂怎么做,2的次幂要么转成1,要么转成2,因为转成2必胜,所以当前操作肯定是为了转成1,所以就是每次除以2,这就要看2上面的指数的奇偶了。
所以我们判断里两个,对于非2的次幂奇数必败,偶数必胜。对于2的次幂,指数奇数必败,指数偶数必胜。
1 #include "bits/stdc++.h"
2 using namespace std;
3 int t;
4 int n;
5 int check(int x){
6 int i,j,an=0;
7 while (x%2==0){
8 an++;
9 x/=2;
10 }
11 return x==1?an:0;
12 }
13 int main(){
14 int i,j,an;
15 scanf("%d",&t);
16 while (t--){
17 scanf("%d",&n);
18 if (n%2==1) cout<<"Bob"<<endl;
19 else{
20 an=check(n);
21 if (an==0 || an%2==0) cout<<"Alice"<<endl;
22 else cout<<"Bob"<<endl;
23 }
24 }
25 return 0;
26 }
博弈论练习6 Deleting Divisors(sg找规律,思维)的更多相关文章
- Lieges of Legendre CodeForces - 603C (博弈论,SG找规律)
大意: 给定$n$堆石子, 两人轮流操作, 每次操作两种选择 $(1)$任选非空堆拿走一个石子 $(2)$任选石子数为$2x(x>0)$的一堆, 替换为$k$堆$x$个石子. ($k$给定) 最 ...
- Gym 101147A The game of Osho(SG找规律)
https://vjudge.net/problem/Gym-101147A 题意:给出G组数,每组数包括两个数B,N,两玩家轮流取数,使得N-num,num<=N并且num是N的整次幂.判断谁 ...
- 【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones
打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> ...
- BZOJ-1228 E&D 博弈SG+找啊找啊找规律
讨厌博弈,找规律找半天还是错的.... 1228: [SDOI2009]E&D Time Limit: 10 Sec Memory Limit: 162 MB Submit: 666 Solv ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- LA 5059 (找规律 SG函数) Playing With Stones
题意: 有n堆石子,两个人轮流取,每次只能取一堆的至少一个至多一半石子,直到不能取为止. 判断先手是否必胜. 分析: 本题的关键就是求SG函数,可是直接分析又不太好分析,于是乎找规律. 经过一番“巧妙 ...
- HDU-4664 Triangulation 博弈,SG函数找规律
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的 ...
- bzoj 1228 [SDOI2009]E&D(sg函数,找规律)
Description 小E 与小W 进行一项名为“E&D”游戏.游戏的规则如下:桌子上有2n 堆石子,编号为1..2n.其中,为了方便起见,我们将第2k-1 堆与第2k 堆(1 ≤ k ≤ ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- hdu 3032 Nim or not Nim? (sg函数打表找规律)
题意:有N堆石子,每堆有s[i]个,Alice和Bob两人轮流取石子,可以从一堆中取任意多的石子,也可以把一堆石子分成两小堆 Alice先取,问谁能获胜 思路:首先观察这道题的数据范围 1 ≤ N ...
随机推荐
- HTML学习笔记6----链接
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- Python学习笔记文件读写之遍历目录树
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- 87、linux root 密码忘记了
子账户登录,然后重置即可
- 用Docker-Compose一分钟搭建Wordpress博客系统
环境: CentOS 7.5 Docker 20.10.2 Docker-Compose 1.25.5 [root@localhost ~]# cat /etc/redhat-release Cent ...
- 修改 input框、textarea框的placeholder样式
/* 设置input框提示内容的样式 */ input::-webkit-input-placeholder { font-size: 14px; color: #ccc; font-weight: ...
- js实现大文件上传——分片上传方法
当前端在开发过程中遇到上传文件需求,如果是上传头像.图片小文件之类的,可以正常按上传流程处理.但是当遇到上传大文件需求时,几个G或者十几个G,那么需要将这么大的文件分割成许多小片段分别上传,这种实现思 ...
- vue v-for 循环中,下拉框 el select 设置初始值 v-model
效果图: 2.解决思路是,v-model 赋值 单独创建一个数组,然后用于接收下拉框的值,然后提交的时候,将这个数组的值,放到提交的数组中. 3.参考: 解决v-for中遍历多个el-select时, ...
- vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么?
vue本身不做事件代理(react将所有事件都委托到document上,然后进行派发) 普通html元素和在组件上挂了.native修饰符的事件.最终EventTarget.addEventListe ...
- bigdecimal 比较大小、bigdecimal 数学运算、bigdecimal 精度
创建 BigDecimal 建议使用 public BigDecimal(String val),使用 number 参数可能会有精度问题 设置精度 setScale(3, BigDecimal.RO ...
- calibredrv命令
flattencell: set L1 [layout create *.gds -dt_expand] $L1 flatten cell TOP_CELL_NAME $L1 gdsout ./*_f ...