(HDU - 1847)Good Luck in CET-4 Everybody!(博弈)
题目链接:Good Luck in CET-4 Everybody! - HDU 1847 - Virtual Judge (ppsucxtt.cn)
题目是中文的,我在这就不翻译题意了。
先说一种打表的方式,通过模拟前几个样例我们可以知道1,2,4,5,7,8是先手必胜态,3,6,9是先手必败态.
容易知道,如果先手经过一次操作后能够到达必败态,则先手必胜,我们就可以利用筛法的思想,以较小的必败态作为基数,每次加上2的幂次,所能到达的数都是必胜态,从小往大遍历的过程中,如果发现某个数没有被遍历过,说明他无法一步走到必败态,但却可以通过拿走一张牌(2的0次幂)变成必胜态,所以他是败态,通过这个思想(类似于埃氏筛打素数表)来求得小于等于1000比赛情况。下面是代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int N=1e3+10;
int vis[N];
//vis[i]=1代表i这个点是必胜态
//vis[i]=2代表i这个点是必败态
int main()
{vis[1]=1;vis[2]=1;vis[3]=2;for(int i=3;i<=1000;i++){if(!vis[i]) vis[i]=2;if(vis[i]==2){for(int j=0;i+(1<<j)<=1000;j++)vis[i+(1<<j)]=1;}}int n;while(scanf("%d",&n)!=EOF){if(vis[n]==1) puts("Kiki");else puts("Cici");}return 0;
}
下面我来介绍另一种方法解决这个问题:
通过列一些较小的必败态我们发现必败态恰好是3的倍数,那是不是所有的3的倍数都是必败态呢?
实际上这个猜想是正确的,下面给出证明:
对于n张牌(n是3的倍数),我们可以从中拿出2^k张牌,容易知道2^k对3取余可能为1也可能为2,但一定不可能为0,因为2和3互质,所以对于是3的倍数的数,当先手拿完牌后一定有n-2^k取余3得1或2,这时候后手就可以对应的拿走取余3所得的余数张牌就可以使得剩余牌数重新是3的倍数(1和2都是2的幂次),由于最终态0对3取余得0,所以先手必输。
而对于n张牌(n不是3的倍数),先手就可以第一次拿走n对3取余所得到的结果,这样剩余牌数就变成了3的倍数,而且是后手先开始,所以先手必胜。
下面是代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
int main()
{int n;while(scanf("%d",&n)!=EOF){if(n%3) puts("Kiki");else puts("Cici");}return 0;
}
(HDU - 1847)Good Luck in CET-4 Everybody!(博弈)相关推荐
- HDU 1847 Good Luck in CET-4 Everybody!(巴什博弈论)
题目地址:HDU 1847 这题可以用NP状态转换. 首先0的时候就代表无法出牌了,所以是必败态.然后根据每一个可以一步到达必败态的是必胜态,不可以一步到达必败态的是必败态.可以推出状态转移方程,然后 ...
- HDU 1847 Good Luck in CET-4 Everybody
题目链接:Problem - 1847 (hdu.edu.cn) Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工 ...
- HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 1847 Good Luck in CET-4 Everybody!(组合博弈)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 1847 ——Good Luck in CET-4 Everybody!
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 1847 Good Luck in CET-4 Everybody! 尼姆博弈
点击打开链接 Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- HDU 1847 Good Luck in CET-4 Everybody! (sg函数)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU(1847)Good Luck in CET-4 Everybody!
利用PN分析求解此题.递推下去会发现3和3的倍数都是P点. #include <iostream> #include <stdio.h> #include <string ...
- HDU 1847 Good Luck in CET-4 Everybody!
当对手面对3的时候,你就已经赢了,所以,尽可能的给对手剩下3,那么只要n是3的倍数就 是Cici赢,不是的话,Kiki会想办法给Cici留下3. #include<stdio.h>int ...
- HDU - 1847 Good Luck in CET-4 Everybody!(sg函数,水题)
题目链接:点击查看 题目大意:给出n张牌,两个人轮流摸牌,每次只能摸2的幂次,问先手必胜还是必败 题目分析:简单sg打表题,先预处理出sg表,然后O(1)查询即可 #include<iostre ...
最新文章
- SqlDataAdapter和SqlCommandBuilder添加数据
- [BZOJ3693]圆桌会议[霍尔定理+线段树]
- cs_EmailQueue_Failure///cs_Emails_Dequeue///cs_Emails_Enqueue
- 李宏毅线性代数笔记5:线性方程组
- Office 365 Exchange 2016 混合部署前准备
- UML类图10分钟快速入门
- Python对象基础
- js全选 复选框的问题
- 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现
- oracle删除本地文件权限,使用 UNIX 权限保护文件
- 构造函数调用默认构造函数_显式无参数构造函数与默认构造函数
- 【linux】信号量的值定义
- qt4 mysql_qt4连接mysql_MySQL
- Typora一次编辑,知乎、CSDN等多平台快速发布:Typora + PicGo + 图床
- 【jQuery笔记Part1】07-jQuery操作css-添加删除切换类、开关灯泡案例
- wordpress主题实现彩色标签云效果
- 国内android源码下载网站
- matlab宝典pdf,《MATLAB 宝典(第4版)》---- 优化.pdf
- 第十二天-函数名 迭代器
- 朱啸虎的“合并盈利论”,实为ofo抢道摩拜带节奏