Hdu 1404 Digital Deletions
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1404
刚开始想采取找规律的方法解题,可以没有发现规律。无奈,只好采用求PN点的方法。
我们假设数字最右边为第一位,且为最低位。那么可以知道当最高位为0时,那么先手的人必定能胜利,这个可以作为一个剪枝条件。
接下来就是两种操作了:1.降低其中任何一位
2.把其中一个0及这位0后面所有的数字删去
我们只需通过这两个操作,寻找目标数字的后续数字状态的PN状态,即可求得目标数字的PN状态。其实我们只需判断后续状态中有没有P点就行了,如果有P点,那么目标数字的状态为N点。如果没有N点,那么目标数字的状态为P点。通过这方法,就可以求得题目要求数字的PN状态了。
#include <iostream>
#include <cstring>
#include <sstream>
#include <cstdio> using namespace std; const int MAXN = 1000000 + 5;
int sg[MAXN]; stringstream ss;
int length ; inline int Get_digit( int num, int i ) // 求出数字第i位数,最右边为第1位
{
switch (i){
case 1: return num%10;
case 2: return num%100/10;
case 3: return num%1000/100;
case 4: return num%10000/1000;
case 5: return num%100000/10000;
default : return num/100000;
};
} int Get_sg( int num ) // 求sg值
{
if( sg[num]!=-1 )
return sg[num];
int temp = 1;
int orignal = num;
int i;
for( i=0;i<length-1;i++ ) // 缩小第i位的值
{
num = orignal;
if( Get_digit( num, i+1 )==0 )
{ // 消去0即后面所有的数
if( Get_sg( num/( temp*10 ) )==0 ) // 发现必败点
{
sg[ orignal ] = 1; // 则此点为必胜点
return 1;
}
}
num = orignal;
while( Get_digit( num, i+1)!=0 )
{
num = num - temp;
if( Get_sg( num )==0 ) // 发现必败点
{
sg[ orignal ] = 1; // 则此点为必胜点
return 1;
}
}
temp = temp * 10;
} num = orignal;
while( Get_digit(num, length)>1 ) // 最高位单独处理
{ // 避免出现 类似于 123 -> 23 的情况
num = num - temp;
if( Get_sg( num )==0 ) // 发现必败点
{
sg[ orignal ] = 1; // 则此点为必胜点
return 1;
}
}
sg[orignal] = 0; // 没有发现必败点,则此点即为必败点
return 0;
} int main()
{
memset( sg, -1,sizeof(sg) ); // 初始化
char in[10];
int num, ans;
sg[0] = 1;
sg[1] = 0; // 初始化
while( scanf("%s", in)!=EOF )
{
if( in[0]=='0' ) // 最高为为0, 则一定胜利
{
printf( "Yes\n" );
continue;
}
ss.clear();
ss << in;
ss >> num; // char转int
length = strlen(in); // 求该数字的长度
ans = Get_sg( num );
if( ans )
{
printf( "Yes\n" );
}
else
{
printf( "No\n" );
}
}
return 0;
}
Hdu 1404 Digital Deletions的更多相关文章
- HDU 1404 Digital Deletions (暴力博弈)
题意:给定一个数字串,最长是6,然后有两种操作. 第一种是,把该串中的一个数字换成一个比该数字小的数,比如 5 可以换成 0,1,2,3,4. e.g. 12345 --> 12341 第二 ...
- hdoj 1404 Digital Deletions(博弈论)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1404 一看就是博弈论的题目,但并没有什么思路,看了题解,才明白 就是求六位数的SG函数,暴力一遍,打表 ...
- hdu 1404 找sg ***
HDU 1404 Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把 ...
- 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/zoj 2725 Digital Deletions 博弈论
暴力打表!! 代码如下: #include<iostream> #include<algorithm> #include<cstdio> #include<c ...
- HDU 1404 (博弈) Digital Deletions
首先如果第一个数字是0的话,那么先手必胜. 对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态. 比如1是必败状态,那么2~9可以转移到1,所以是必胜状态. 10,10*,10**, ...
- HDU 1013 Digital Roots【字符串,水】
Digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU 1013 Digital Roots(to_string的具体运用)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1013 Digital Roots Time Limit: 2000/1000 MS (Java/Othe ...
- HDU 4394 Digital Square
Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- Hope
透过希望的窗棂,在阴霾的罅隙里也可以寻找阳光,看到未来的春暖花开. ——forever97
- uva11536 Smallest Sub-Array
Thinking about it: 我的思路跟sliding window有点类似.假设已经确定了一个区间[l, r],序列中从 l 到 r 恰好包含了[1, K]的各个元素,则从 r 开始继续迭代 ...
- hpu校赛--雪人的高度(离散化线段树)
1721: 感恩节KK专场——雪人的高度 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 35 [提交][状态][讨论版] 题目描述 大雪过后,KK决定在春秋大道的某些区间 ...
- 移动开发语言Swift
苹果公布了全新的编程语言Swift,Swift继承了Objective-C语言特性,并从Python和Java Script中长处,使Swift更易读.未来swift编程语言的会特大广大的使用 Swi ...
- 转载 js判断浏览器
$scope.identifyBrowser= function () { var userAgent = navigator.userAgent, rMsie = /(msie\s|trident. ...
- js静态方法和实例方法
js静态方法 function foo(){} // 声明类 foo.method = function(){} // 方法体 使用:foo.method() js实例方法 function foo( ...
- 记载abp中Dbcontext的疑问
q:abp中httpcontext如何在一次请求中保证获取的是相同的实例. 大牛的原话: LifestylePerWebRequest does not works good with async. ...
- Implement custom foreach function in C#
http://msdn.microsoft.com/en-us/library/System.Collections.IEnumerator.aspx http://support.microsoft ...
- 数据库SQL基础知识
数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理 ...
- 设计模式值六大原则——里氏替换原则(LSP)
里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题. 继承的优点: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性: 提高代码的重用性: 子类 ...