题目链接: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!(博弈)相关推荐

  1. HDU 1847 Good Luck in CET-4 Everybody!(巴什博弈论)

    题目地址:HDU 1847 这题可以用NP状态转换. 首先0的时候就代表无法出牌了,所以是必败态.然后根据每一个可以一步到达必败态的是必胜态,不可以一步到达必败态的是必败态.可以推出状态转移方程,然后 ...

  2. HDU 1847 Good Luck in CET-4 Everybody

    题目链接:​​​​​​Problem - 1847 (hdu.edu.cn) Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. HDU(1847)Good Luck in CET-4 Everybody!

    利用PN分析求解此题.递推下去会发现3和3的倍数都是P点. #include <iostream> #include <stdio.h> #include <string ...

  9. HDU 1847 Good Luck in CET-4 Everybody!

    当对手面对3的时候,你就已经赢了,所以,尽可能的给对手剩下3,那么只要n是3的倍数就 是Cici赢,不是的话,Kiki会想办法给Cici留下3. #include<stdio.h>int ...

  10. HDU - 1847 Good Luck in CET-4 Everybody!(sg函数,水题)

    题目链接:点击查看 题目大意:给出n张牌,两个人轮流摸牌,每次只能摸2的幂次,问先手必胜还是必败 题目分析:简单sg打表题,先预处理出sg表,然后O(1)查询即可 #include<iostre ...

最新文章

  1. SqlDataAdapter和SqlCommandBuilder添加数据
  2. [BZOJ3693]圆桌会议[霍尔定理+线段树]
  3. cs_EmailQueue_Failure///cs_Emails_Dequeue///cs_Emails_Enqueue
  4. 李宏毅线性代数笔记5:线性方程组
  5. Office 365 Exchange 2016 混合部署前准备
  6. UML类图10分钟快速入门
  7. Python对象基础
  8. js全选 复选框的问题
  9. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现
  10. oracle删除本地文件权限,使用 UNIX 权限保护文件
  11. 构造函数调用默认构造函数_显式无参数构造函数与默认构造函数
  12. 【linux】信号量的值定义
  13. qt4 mysql_qt4连接mysql_MySQL
  14. Typora一次编辑,知乎、CSDN等多平台快速发布:Typora + PicGo + 图床
  15. 【jQuery笔记Part1】07-jQuery操作css-添加删除切换类、开关灯泡案例
  16. wordpress主题实现彩色标签云效果
  17. 国内android源码下载网站
  18. matlab宝典pdf,《MATLAB 宝典(第4版)》---- 优化.pdf
  19. 第十二天-函数名 迭代器
  20. 朱啸虎的“合并盈利论”,实为ofo抢道摩拜带节奏

热门文章

  1. 扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?
  2. MongoDB查找附近的人
  3. C#里Directory类的常用方法
  4. 【并发编程】Thread类的详细介绍
  5. html表格居中设置css样式,css怎么设置table居中?
  6. stock concerning
  7. Java中Final修饰对象
  8. 《火影忍者》手游忍者君麻吕
  9. Java8特性系列文章目录
  10. Java 8 特性 – 终极指南