HDU 1849 Rabbit and Grass(博弈入门)
2015-11-15 18:11
381 查看
【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=1849
【解题报告】
题目里所有棋子都在同一行,但我们考虑到所有棋子互相不影响,所以可以假设他们都在不同行。
把每个棋子距离最左端的距离设为他的权值。
那么目标状态(必败态)为权值和为0.
所以我们把题目抽象为
所以这实际上就是一个nim问题。关于nim问题的解决以及解法的正确性证明可以参考相应答案
【参考代码】
【解题报告】
题目里所有棋子都在同一行,但我们考虑到所有棋子互相不影响,所以可以假设他们都在不同行。
把每个棋子距离最左端的距离设为他的权值。
那么目标状态(必败态)为权值和为0.
所以我们把题目抽象为
给你n个数,每次可以任意挑一个数,把它减去任意值,直到所有数都变为0.不能继续操作的人失败。
所以这实际上就是一个nim问题。关于nim问题的解决以及解法的正确性证明可以参考相应答案
【参考代码】
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int m; while(~scanf("%d",&m) && m ) { int state=0; for( int i=1; i<=m; i++ ) { int num; scanf("%d",&num); state^=num; } if(state)printf("Rabbit Win!\n"); else printf("Grass Win!\n"); } return 0; }
相关文章推荐
- C语言scanf函数输入时键盘缓冲区\n的问题[经典问题]
- UI之事件与手势详解
- 嵌入式系统支持ramdisk文件系统
- bt协议详解 基础篇(上)
- 十进制中正整数N中1的个数
- C语言复杂类型声明
- 本地Eclipse连接HDFS进行简单的文件操作
- 关于eclipse连接数据库的问题
- 支付宝集成
- ios的手势操作之UIGestureRecognizer浅析
- 《大道至简》第七、八章有感
- mysql提示Column count doesn't match value count at row 1错误
- Erlang Trace机制
- MySQL_MyISAM和InnoDB存储引擎的比较
- IOS Toast
- iOS开发的22个诡异技巧,你知道多少?
- c语言之多级指针理解二
- Python博客网站学习
- IQtoQN
- 无线网络基础