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

一看就是博弈论的题目,但并没有什么思路,看了题解,才明白

就是求六位数的SG函数,暴力一遍,打表就OK。

具体的操作是先找P态,即最终无法移动的状态,可知无数可取是P态,0是N态,1是P态,然后从1开始进行暴力,

所有可以到!sg[i]的点标记为N态,暴力过程为标记一步可以到sg[i]的数,包括两类:

一类是仅某一位数字不同,提取方法比较巧妙:

 ; --i){
     int m = x;
     ;
     ; j < i; ++j)
         ;
     )) / base;
     ; ++j){
         m += base;
         sg[m] = ;//越界了
     }
 }

另一类是在sg[i]不足6位时在后面填一个0,其后填其他数:

  ){
     int m = x;
     ;
     ;i++){
         m *= ;
         ; j < base; ++j)
             sg[m+j] = ;
         ;
     }
 }

总的代码如下:

 #include<stdio.h>
 #include<cstring>
 using namespace std;
 ;
 int sg[MAXN];
 int get_lgt(int x){
     ) ;
     ) ;
     ) ;
     ) ;
     ) ;
     ;
 }
 void extend(int x){
     int lgt = get_lgt(x);
     ; --i){
         int m = x;
         ;
         ; j < i; ++j)
             ;
         )) / base;
         ; ++j){
             m += base;
             sg[m] = ;//越界了
         }
     }
     //提取每一位的数字,遍历到9
      ){
         int m = x;
         ;
         ;i++){
             m *= ;
             ; j < base; ++j)
                 sg[m+j] = ;
             ;
         }
     }
 }
 // sg[0] = 1;N态 sg[1] = 0;P态
 // 终态是P态,可以移动到P态的是N态,所有移动都会导致N态的是P态
 void init(){
     memset(sg,,sizeof(sg));
     sg[] = ;
     ; i < MAXN; ++i)
         if(!sg[i])//N态
             extend(i);
 }
 int main(){
         freopen("test.out","r",stdin);
     freopen("mtest.out","w",stdout);
     init();
     ];
     int lgt;
     int n;
     while(~scanf("%s",&str)){
         n = ;
         ]==' )
             printf("Yes\n");
         else{
             lgt = strlen(str);
             ; i < lgt; ++i){
                 n *= ;
                 n += str[i]-';
             }//字符串转化为整数
             if(sg[n])
                 printf("Yes\n");
             else
                 printf("No\n");
         }
     }
 }

hdoj 1404 Digital Deletions(博弈论)的更多相关文章

  1. hdu 1404/zoj 2725 Digital Deletions 博弈论

    暴力打表!! 代码如下: #include<iostream> #include<algorithm> #include<cstdio> #include<c ...

  2. Hdu 1404 Digital Deletions

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1404 刚开始想采取找规律的方法解题,可以没有发现规律.无奈,只好采用求PN点的方法. 我们假 ...

  3. HDU 1404 Digital Deletions (暴力博弈)

    题意:给定一个数字串,最长是6,然后有两种操作. 第一种是,把该串中的一个数字换成一个比该数字小的数,比如 5 可以换成 0,1,2,3,4.   e.g. 12345 --> 12341 第二 ...

  4. Digital Deletions HDU - 1404

    Digital deletions is a two-player game. The rule of the game is as following. Begin by writing down ...

  5. HDU 1404 (博弈) Digital Deletions

    首先如果第一个数字是0的话,那么先手必胜. 对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态. 比如1是必败状态,那么2~9可以转移到1,所以是必胜状态. 10,10*,10**, ...

  6. hdu 1404 找sg ***

    HDU 1404  Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把 ...

  7. 博弈论BOSS

    基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_c ...

  8. 【转】ACM博弈知识汇总

    博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...

  9. ACM博弈知识汇总(转)

    博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻 ...

随机推荐

  1. python Tkinter接受键盘输入并保存文件

    最近想用python写个切换host的小工具,折腾了好几天,终于实现了第一步. 采用Tkinter编程,text控件接受输入,然后点击save按钮,保存内容到当前文件夹下,文件名为hostb,如下两张 ...

  2. BZOJ 1787 紧急集合

    LCA.注意细节. #include<iostream> #include<cstdio> #include<cstring> #include<algori ...

  3. cocoStudio UI编辑器 学习总结

    一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...

  4. 09day2

    多米诺骨牌 递推+高精度 [问题描述] Jzabc 对多米诺骨牌有很大兴趣,然而他的骨牌比较特别,只有黑色的和白色的两种.他觉得如果存在连续三个骨牌是同一种颜色,那么这个骨牌排列便是不美观的.现在他有 ...

  5. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  6. Spring中@Resource与@Autoware

    问题 这其实就是@Autoware与@Resource没有正确的使用,这个错误是因为wmPoiOplogService这个变量装配方式是@Resource,按照@Resource的按名字查找的方式,并 ...

  7. 【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)

    原文网址:http://www.cnblogs.com/Realh/archive/2010/10/10/1847251.html 前两天在Windows下成功地搭好了一个Python开发环境,这次转 ...

  8. requirejs之demo (转)

    具体的理论就不讲了,可以参考 http://www.ruanyifeng.com/blog/2012/10/javascript_module.html http://www.ruanyifeng.c ...

  9. linux 下按在sqllite

    1 安装 去sqlite主页http://www.sqlite.org/.跳转到下载也http://www.sqlite.org/download.html.源码下载sqlite-amalgamati ...

  10. rand.Read() 和 io.ReadFull(rand.Reader) 的区别?

    golang的随机包 rand.go 中我们可以看到 rand.Read 其实是调用的io.Reader.Read() 1: // Package rand implements a cryptogr ...