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 (Java/Others)
Total Submission(s): 9703    Accepted Submission(s): 6286

Problem Description

大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此。当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考前的放松,所谓“张弛有道”就是这个意思。这不,Kiki和Cici在每天晚上休息之前都要玩一会儿扑克牌以放松神经。
“升级”?“双扣”?“红五”?还是“斗地主”?
当然都不是!那多俗啊~
作为计算机学院的学生,Kiki和Cici打牌的时候可没忘记专业,她们打牌的规则是这样的:
1、  总共n张牌;
2、  双方轮流抓牌;
3、  每人每次抓牌的个数只能是2的幂次(即:1,2,4,8,16…)
4、  抓完牌,胜负结果也出来了:最后抓完牌的人为胜者;
假设Kiki和Cici都是足够聪明(其实不用假设,哪有不聪明的学生~),并且每次都是Kiki先抓牌,请问谁能赢呢?
当然,打牌无论谁赢都问题不大,重要的是马上到来的CET-4能有好的状态。

Good luck in CET-4 everybody!

Input

输入数据包含多个测试用例,每个测试用例占一行,包含一个整数n(1<=n<=1000)。

Output

如果Kiki能赢的话,请输出“Kiki”,否则请输出“Cici”,每个实例的输出占一行。

Sample Input

1
3

Sample Output

Kiki
Cici

Author

lcy

Source

求sg值,

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 using namespace std;
 5
 6 #define N 1024
 7
 8 const int MAXN = 16;
 9 const int MAXM = 1000 + 5;
10
11 int f[MAXN];//f[0]存合法移动个数
12 int sg[MAXM];
13 bool exist[MAXN];//hash, sg不会超过合法移动个数MAXN
14
15 void getSg(int n)
16 {
17     int i, j;
18     sg[0] = 0;
19     for (i = 1; i <= n; ++i) {
20         memset(exist, false, sizeof(exist));
21         for (j = 1; j <= f[0] && f[j] <= i; ++j) {
22             exist[sg[i - f[j]]] = true;
23         }
24         for (j = 0; j < MAXN; ++j) {
25             if (!exist[j]) {
26                 sg[i] = j;
27                 break;
28             }
29         }
30     }
31 }
32
33 int main(){
34
35     int i;
36     f[0] = 15;
37     f[1]=1;
38     for(i=2;i<16;++i){
39         f[i]=f[i-1]*2;
40         //printf("%d ", f[i]);
41     }
42     getSg(1005);
43
44     int n;
45
46     while(~scanf("%d",&n)){
47         if(sg[n]>0){
48             printf("Kiki\n");
49         }
50         else{
51             printf("Cici\n");
52         }
53
54     }
55
56     return 0;
57 }

另外此题有规律可循,

d.

1、  总共n张牌;
2、  双方轮流抓牌;
3、  每人每次抓牌的个数只能是2的幂次(即:1,2,4,8,16…)
4、  抓完牌,胜负结果也出来了:最后抓完牌的人为胜者;

s.

画出PN图,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
N N P N N P N N P N  N   P   N   N  P   N
上图很容易画出,因为剩余1或2张牌时,后者可以一次取光获胜,当剩余3张牌时,因为后者只能取1张或者2张,所以后者必败,一次类推就可以得出上图的PN图。跟据PN图可以很容易的得出当牌的张数为3的倍数时先手必败,反之先手必胜。

ps:好神奇,好像转成只能取1和2的Bash Game了。

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4
 5 int main(){
 6
 7     int n;
 8
 9     while(~scanf("%d",&n)){
10
11         if(n%3>0){
12             printf("Kiki\n");
13         }
14         else{
15             printf("Cici\n");
16         }
17
18     }
19
20     return 0;
21 }

时间: 2024-12-21 08:36:32

hdu 1847 Good Luck in CET-4 Everybody!(sg)的相关文章

hdu 1847 Good Luck in CET-4 Everybody!

法一: 首先我们可以想到在面对3的时候是必败局,谁面对3时无论拿多少都会败 ! <---这是关键 那么就要尽量造成这样的局势给对方,因为任何不是3的倍数的数加1或2都可以变成3的倍数, 同理减去1或2也可以变成3的倍数,也就是说假设目前的个数不是3的倍数,那我肯定能把它 拿成3的倍数,比如现在是11个,那我拿走2个就变成9,这样就造成对方为3的倍数局势,那 么对方拿m个我都可以通过拿1或者2使总共一轮拿的数目成为3的倍数 #include<stdio.h> int main() { in

HDU 1847 Good Luck in CET-4 Everybody! (博弈论sg)

Good Luck in CET-4 Everybody! Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考前的放松,所谓"张弛有道"就是这个意思.这不,Kiki和Cici在每天晚上休息之前都要玩一会儿扑克牌以放松神经. "升级"?"双扣"?"红五

[sg函数] hdu 1847 Good Luck in CET-4 Everybody!

 NET IIS7.5 创建站点时,如果发现以下错误,并且 默认站点访问没有问题的话, 可以尝试,进入 处理程序映射 右键恢复为父级,有可能会有意想不到的 惊喜. 我的问题就是这样解决的. 出现这种问题的关键:是你的站点没有可以处理的扩展. 如:*.asp, *.html, *.aspx等等 错误摘要 HTTP 错误 404.4 - Not Found 您要查找的资源没有与之关联的处理程序. 详细错误信息 模块 IIS Web Core 通知 MapRequestHandler 处理程序 尚

HDU 4512 吉哥系列故事——完美队形(LCIS)

Problem Description 吉哥这几天对队形比较感兴趣. 有一天,有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则称之为完美队形: 1.挑出的人保持他们在原队形的相对顺序不变: 2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然,如果m是奇数,中间那个人可以任意: 3.从左到中间那个人,身高需保证递增,如

HDU 1025 Constructing Roads In JGShining&#39;s Kingdom (DP)

Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which are located in two parallel lines. Half of these cities are rich in resource (we call them rich cities) while the others are short of resource (we ca

HDU 4502 吉哥系列故事——临时工计划(DP)

Problem Description 俗话说一分钱难倒英雄汉,高中几年下来,吉哥已经深深明白了这个道理,因此,新年开始存储一年的个人资金已经成了习惯,不过自从大学之后他不好意思再向大人要压岁钱了,只能把唯一的希望放到自己身上.可是由于时间段的特殊性和自己能力的因素,只能找到些零零碎碎的工作,吉哥想知道怎么安排自己的假期才能获得最多的工资. 已知吉哥一共有m天的假期,每天的编号从1到m,一共有n份可以做的工作,每份工作都知道起始时间s,终止时间e和对应的工资c,每份工作的起始和终止时间以天为单位

HDU 5437 &amp; ICPC 2015 Changchun Alisha&#39;s Party(优先队列)

Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 7971    Accepted Submission(s): 1833 Description Princess Alisha invites her friends to come to her birthday party. Each of her f

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

题目链接:HDU 1847 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考前的放松,所谓"张弛有道"就是这个意思.这不,Kiki和Cici在每天晚上休息之前都要玩一会儿扑克牌以放松神经. "升级"?"双扣"?"红五"?还是"斗

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

题目地址:HDU 1847 这题可以用NP状态转换. 首先0的时候就代表无法出牌了,所以是必败态.然后根据每一个可以一步到达必败态的是必胜态,不可以一步到达必败态的是必败态.可以推出状态转移方程,然后用DP求解.即从已知状态向未知状态转移,就是从小的向大的转移,假如它的下一步没有必败态,则它是必败态,若下一步有一个必败态,那它就是必胜态. 代码如下: #include <iostream> #include <cstdio> #include <string> #inc

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 (Java/Others)Total Submission(s): 9934    Accepted Submission(s): 6433 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci