hdoj 1404 Digital Deletions(博弈论)
题目链接: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(博弈论)的更多相关文章
- hdu 1404/zoj 2725 Digital Deletions 博弈论
暴力打表!! 代码如下: #include<iostream> #include<algorithm> #include<cstdio> #include<c ...
- Hdu 1404 Digital Deletions
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1404 刚开始想采取找规律的方法解题,可以没有发现规律.无奈,只好采用求PN点的方法. 我们假 ...
- HDU 1404 Digital Deletions (暴力博弈)
题意:给定一个数字串,最长是6,然后有两种操作. 第一种是,把该串中的一个数字换成一个比该数字小的数,比如 5 可以换成 0,1,2,3,4. e.g. 12345 --> 12341 第二 ...
- Digital Deletions HDU - 1404
Digital deletions is a two-player game. The rule of the game is as following. Begin by writing down ...
- HDU 1404 (博弈) Digital Deletions
首先如果第一个数字是0的话,那么先手必胜. 对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态. 比如1是必败状态,那么2~9可以转移到1,所以是必胜状态. 10,10*,10**, ...
- hdu 1404 找sg ***
HDU 1404 Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把 ...
- 博弈论BOSS
基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_c ...
- 【转】ACM博弈知识汇总
博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...
- ACM博弈知识汇总(转)
博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻 ...
随机推荐
- jquerymobile使用技巧
1)ajax开关(默认jquery以ajax方式加载页面) $.mobile.ajaxEnabled = false; 2)不编译指定标签 $.mobile.page.prototype.option ...
- 编译busybox错误
为了制作一个文件系统,首先要用busybox编译出文件系统所需要的应用程序.在下载了busybox-1.13.0.tar.bz2后,编译出现如下错误: In file included from /o ...
- Android 系统开发学习杂记(转)
http://blog.csdn.net/shagoo/article/details/6709430 > 开发环境1.安装 Eclipse 和 android-sdk 并解压安装2.Eclip ...
- matplotlib 中文问题
matplotlib的缺省配置文件中所使用的字体无法正确显示中文.为了让图表能正确显示中文,主要有三种设置中文的方法: (1)直接读取指定的字体文件.这种方法的依赖性最小,缺点是要指定字体文件的路径. ...
- MySQL内存表-临时表
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引.但如果MySQL或者服务器重新启动,表中数据将会丢失.用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字 ...
- WCF 扩展一:格式化Web服务请求XML
扩展原因 有一WebService,在工程中添加Web Service引用后调用不成功,但是用SoapUI测试正常 分析 用tctTrace跟踪报文后发现wcf生成的报文命名空间与SoapUI的不一样 ...
- $("#province").val();取不到select的值求解
MVC下的razor视图开发中无法取到select的值问题求解 cshtml 如下 <select name="province" id="province&quo ...
- java线程实践记录
框架构建过程中遇到需要用到线程的地方,虽然以前经常听到线程,也看过一些线程类的文章,但真正使用时还是遇到一些问题,此篇正式为了记录自己对线程实操的体会. 入口类代码: public class tes ...
- SQL跨数据库复制表数据
SQL跨数据库复制表数据 不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...
- SQL Server 最小化日志操作解析,应用[手稿]
Sql Server 中数据库在BULK_LOGGED/SIMPLE模式下的一些操作会采用最小化日志的记录方式,以减小tran log落盘日志量从而提高整体性能. 这里我简单介绍下哪些操作在什么样的情 ...