BZOJ3895 rock
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3895
看这题感觉好神。
SG函数,dp。。。。好像都不行呀。
最后去膜拜题解发现记忆化搜索 囧
那我就直接上他的做法了。
假设每堆石子的数量都大于1
那么我们定义操作数b为当前石子总数+当前堆数-1
若b为奇数,则先手必胜,否则后手必胜
证明:
若当前只有一堆,则正确性显然
否则:
若b为奇数,那么先手只需进行一次合成操作,此时操作数会-1,且仍不存在大小为1的堆,因此只需要证明b为偶数时先手必败即可
若先手选择了合成操作,那么操作数-1且不存在大小为1的堆,状态回到了b为奇数的状态
若先手取走了某个大小>=3的堆中的一个石子,那么操作数-1且不存在大小为1的堆,状态回到了b为奇数的状态
若先手取走了某个大小为2的堆中的一个石子,那么后手只需要将另一个石子与其它堆合成,b的奇偶性不变且仍不存在大小为1的堆
故b为偶数时先手必败
现在回到一般情况 可能存在大小为1的堆
我们设有a个大小为1的堆,其余堆的操作数为b
那么当前的状态就可以用一个二元组(a,b)来表示
然后就好说了,直接进行记忆化搜索,分情况讨论。
#include <cstdio>
#include <cstring>
#include <algorithm> #define N 1010 using namespace std; int f[][];
int n; int dfs(int num1,int steps){
if(!num1) return steps&;
if(steps==) return dfs(num1+,);
if(~f[num1][steps]) return f[num1][steps];
int &ans=f[num1][steps];
if(num1){
if(!dfs(num1-,steps)) return ans=;//取走1的一堆
if(steps && !dfs(num1-,steps+)) return ans=; //将一个1加入多堆中
}
if(num1>){
if(steps && !dfs(num1-,steps+)) return ans=; //合并两堆1
if(!steps && !dfs(num1-,steps+)) return ans=;
}
if(steps && !dfs(num1,steps-)) return ans=; //普通的合并与取石子
return ans=;
} int main(){
memset(f,-,sizeof(f));
scanf("%d",&n);
while(scanf("%d",&n)==){
int a=,b=-;
for(int i=,x;i<=n;i++){
scanf("%d",&x);
if(x==) a++;
else b+=x+;
}
puts(dfs(a,b)? "YES":"NO");
}
return ;
}
BZOJ3895 rock的更多相关文章
- ural 2069. Hard Rock
2069. Hard Rock Time limit: 1.0 secondMemory limit: 64 MB Ilya is a frontman of the most famous rock ...
- POJ - 2339 Rock, Scissors, Paper
初看题目时就发了个错误,我因为没有耐心看题而不了解题目本身的意思,找不到做题的突破口,即使看了一些题解,还是没有想到方法. 后来在去问安叔,安叔一语道破天机,问我有没有搞清题目的意思,我才恍然大悟,做 ...
- ROCK 聚类算法
ROCK (RObust Clustering using linKs) 聚类算法是一种鲁棒的用于分类属性的聚类算法.该算法属于凝聚型的层次聚类算法.之所以鲁棒是因为在确认两对象(样本点/簇)之间 ...
- Rice Rock
先翻译评分要点,然后一点点翻译程序实现过程 如何产生一堆岩石? rock_group = set([])#空集合,全局变量 rock_group.add(a_rock) 要画出来draw hand ...
- HDOJ(HDU) 2164 Rock, Paper, or Scissors?
Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...
- Hard Rock
Ilya is a frontman of the most famous rock band on Earth. Band decided to make the most awesome musi ...
- The Rock Game
Before the cows head home for rest and recreation, Farmer John wantsthem to get some intellectual st ...
- 弹指之间 -- Folk Rock
CHAPTER 17 民谣摇滚 Folk Rock 以8Beat为主,120左右的速度最能表现此节奏特色. 示例曲目: 略
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
随机推荐
- Windows下使用Nexus搭建Maven私服(使用)
注意: 1.从3.0版本的Nexus开始,已经不再缓存https://repo1.maven.org/maven2/的包,所以当安装好之后,在界面上不会有任何的包可以搜索到,但是功能是一切正常的,只有 ...
- esrichina
http://www.esrichina.com.cn/arcgis10.5/index.html#fillback=0100307b617b7b7b363736363039323733627b617 ...
- VS调试时不加载符号
加载符号,能够让调试时进入系统的dll中,甚至能达到汇编语言的深度,让你调试时能够逐行进行.但是加载符号的话,会使得每次调试,增加进入到首个断点的时间. 而且有时候也非必要加载符号,它的取消可以使用下 ...
- python实现网速控制,限制上传下载速度
对于python的web,比如flask使用的werkzeug,首先找到wsgi的请求和响应的代码,使用算法实现大文件的小速率上传和下载 考虑python实现socket限流 关于限速的讨论:http ...
- Linux之时钟中断
from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/) 时钟中断的产生 Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入 ...
- ci中 chrome对favicon.ico请求,导致log报错 解决方法
chrome浏览器会自动对favicon.ico进行请求,所以当没有为网站添加 favicon.ico 时会出现404的页面错误在实际开发过程中,CI框架 打开 ERROR log,会一直显示ERRO ...
- JSP简明教程:汇总
原创JSP教程,简洁明了,不含废话. JSP简明教程(一):JSP简单介绍 JSP简明教程(二):JSP基本的语法 JSP简明教程(三):JSP隐含对象 JSP简明教程(四):EL表达式语言.Java ...
- ASI和AFN实现POST异步请求的相同功能的代码
I'm a newbie in obj-c and have been using asihttp for some of my projects. When doing a post request ...
- Hibernate 配置C3P0 连接池
第一步在hibernate.cfg.xml配置 <!-- 连接池 --> <property name="hibernate.connection.provider_cla ...
- Js两种post方式(转)
第一种提交post的方式是传统方式,判断浏览器进行post请求. <SCRIPT stype=text/javascript> var xmlobj; //定义XMLHttpRequest ...