hdoj 1404 Digital Deletions

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1404

 1 #include<stdio.h>
 2 #include<cstring>
 3 using namespace std;
 4 const int MAXN = 1000000;
 5 int sg[MAXN];
 6 int get_lgt(int x){
 7     if(x/100000) return 6;
 8     if(x/10000) return 5;
 9     if(x/1000) return 4;
10     if(x/100) return 3;
11     if(x/10) return 2;
12     return 1;
13 }
14 void extend(int x){
15     int lgt = get_lgt(x);
16     for( int i = lgt; i >= 1; --i){
17         int m = x;
18         int base = 1;
19         for(int j = 1; j < i; ++j)
20             base *= 10;
21         int tmp = ( m % (base*10)) / base;
22         for(int j = tmp; j < 9; ++j){
23             m += base;
24             sg[m] = 1;//越界了
25         }
26     }
27     //提取每一位的数字,遍历到9
28     if( lgt!= 6 ){
29         int m = x;
30         int base = 1;
31         for( int i = lgt; i < 6;i++){
32             m *= 10;
33             for(int j = 0; j < base; ++j)
34                 sg[m+j] = 1;
35             base *= 10;
36         }
37     }
38 }
39 // sg[0] = 1;N态 sg[1] = 0;P态
40 // 终态是P态,可以移动到P态的是N态,所有移动都会导致N态的是P态
41 void init(){
42     memset(sg,0,sizeof(sg));
43     sg[0] = 1;
44     for(int i = 1; i < MAXN; ++i)
45         if(!sg[i])//N态
46             extend(i);
47 }
48 int main(){
49         freopen("test.out","r",stdin);
50     freopen("mtest.out","w",stdout);
51     init();
52     char str[8];
53     int lgt;
54     int n;
55     while(~scanf("%s",&str)){
56         n = 0;
57         if( str[0]==‘0‘ )
58             printf("Yes\n");
59         else{
60             lgt = strlen(str);
61             for(int i = 0; i < lgt; ++i){
62                 n *= 10;
63                 n += str[i]-‘0‘;
64             }//字符串转化为整数
65             if(sg[n])
66                 printf("Yes\n");
67             else
68                 printf("No\n");
69         }
70     }
71 }
时间: 2025-01-01 20:54:27

hdoj 1404 Digital Deletions的相关文章

HDU 1404 (博弈) Digital Deletions

首先如果第一个数字是0的话,那么先手必胜. 对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态. 比如1是必败状态,那么2~9可以转移到1,所以是必胜状态. 10,10*,10**,10***,10****也都可以删除1后面那个0,转移到1,所以也是必胜状态. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 const int maxn = 999999; 6 int

HDOJ(1013) ——Digital Roots(字符串模拟题)

Problem Description The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits a

hdu 1404 找sg ***

HDU 1404  Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把所以数字删除的人获胜,问前者胜还是后者胜. 字符串长度为1-6,前者胜输出Yes,否则输出No. 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring>

hdu 14004

Digital Deletions Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1955    Accepted Submission(s): 694 Problem Description Digital deletions is a two-player game. The rule of the game is as follo

(SG) hdu 1404

Digital Deletions Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2130    Accepted Submission(s): 747 Problem Description Digital deletions is a two-player game. The rule of the game is as follo

博弈论(转)

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜.因此我们发

【转】ACM博弈知识汇总

博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.

组合博弈入门知识汇总(转)

(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜.因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走 k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的 取法,那么先取者肯定获

博弈汇总

转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.