题意是这样的,一开始给你一串数字,两个人轮流操作,操作可以分为两种。

1、每次修改一个数字,使其变为一个小于当前的非负数。

2、移除中间的某一个0以及0右边的所有数字。

使得所有数字消失的游戏者获胜。

题目有一个很关键的条件,最多只有6为,其实我们可以这样考虑这个问题。

对于每一位,最多有11种状态,0到9以及空。

所以我们可以用6个11进制表示所有的状态,这样算来时间上是可以承受的。

然后的话,就是典型的记忆化搜了,对于每一个数,枚举每一种后继的状态,然后用基本的博弈知识判断该状态是必胜还是必败。

 

 #include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 2000200
using namespace std; int f[maxn],dig[],cur,k,n;
char s[]; int dfs(int x)
{
if (x<=) return -;
if (f[x]!=) return f[x];
int tot,d;
for (int i=; i<=; i++)
{
tot=x,d=(x/dig[i])%;
if (d==) break;
for (int j=; j<d; j++)
{
tot-=dig[i];
if (dfs(tot)==-) return f[x]=;
}
if (d==)
{
if (dfs(tot/dig[i+])==-) return f[x]=;
}
}
return f[x]=-;
} int main()
{
memset(f,,sizeof f);
dig[]=dig[]=;
for (int i=; i<; i++) dig[]+=dig[i]=dig[i-]*;
dig[]*=,dig[]=dig[]*;
while (scanf("%s",s)!=EOF)
{
for (cur=,n=strlen(s)-,k=; n>=; k++,n--)
cur+=dig[k]*(s[n]-''+);
if (dfs(cur)==) printf("Yes\n");
else printf("No\n");
}
return ;
}

最新文章

  1. Asp.net Boilerplate之AbpSession扩展
  2. javascript运动系列第四篇——抖动
  3. C#(委托a)
  4. BZOJ3252: 攻略
  5. 如何在使用itext生成pdf文档时给文档添加背景图片
  6. 在进行javaIO写文件操作后文件内容为空的情况
  7. leetcode6
  8. mysql galera cluster 集群的分裂与仲裁机制
  9. UVA 753 UNIX 插头(EK网络流+Floyd传递闭包)
  10. Hive报错之java.sql.SQLException: Field &#39;IS_STOREDASSUBDIRECTORIES&#39; doesn&#39;t have a default value
  11. COJ 0046 20701除法
  12. Java Hibernate 之 Session 状态
  13. 转 Fragment 和 FragmentActivity的使用
  14. switch条件语句规则
  15. SVN使用方法
  16. windows socket 文件下载上传
  17. yum安装常用工具命令
  18. Spring Boot中CrudRepository与JpaRepository Dao中JpaRepository和JpaSpecificationExecutor查询
  19. Java两种核心机制
  20. 2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告

热门文章

  1. 20145209 2016-2017-2 《Java程序设计》课程总结
  2. 3110: [Zjoi2013]K大数查询
  3. MySQL入门篇(五)之高可用架构MHA
  4. pandaboard es 制作SD启动卡OMAP4460
  5. 使用idea写ssm的时候提示源文件夹中的文件找不到
  6. Siki_Unity_2-3_UGUI_Unity4.6 UI Beta版本入门学习(未学)
  7. Linux建立互信关系(ssh公钥登录)
  8. 关于购买Redis服务器:腾讯云、阿里云还是华为云?
  9. shell基础 -- 入门篇
  10. Python多重赋值