[HDU2509]Be the Winner(博弈Anti-SG+Multi-SG游戏)
来源:互联网 发布:剑灵男刺客捏脸数据图 编辑:程序博客网 时间:2024/05/22 06:50
题目描述
传送门
题解
就是一个Anti-SG和Multi-SG游戏的结合。
求出SG函数了之后用结论就可以了。
不过这道题是可以证明堆的大小为i的堆sg=i
用归纳法,首先sg(0)=0显然。
假设对于0-n-1sg(i)=i都成立,证明sg(n)=n
可以看出求n的sg函数实际上就是将所有相加小于n的数两两异或起来然后取一个最小的没有用过的
那么我们就需要证明0-n-1两两异或起来取遍0-n-1
这不显然嘛。。。
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 105int n,ans,Max;int a[N],sg[N];int get_sg(int x){ if (sg[x]!=-1) return sg[x]; bool ext[N];memset(ext,0,sizeof(ext)); for (int i=1;i<=x;++i) for (int j=1;j<=x-i+1;++j) ext[get_sg(j-1)^get_sg(x-j-i+1)]=1; for (int i=0;;++i) if (!ext[i]) {sg[x]=i;break;} return sg[x];}int main(){ memset(sg,-1,sizeof(sg)); while (~scanf("%d",&n)) { for (int i=1;i<=n;++i) scanf("%d",&a[i]); ans=0;Max=0; for (int i=1;i<=n;++i) { ans^=get_sg(a[i]); Max=max(Max,get_sg(a[i])); } if ((ans!=0&&Max>1)||(ans==0&&Max<=1)) puts("Yes"); else puts("No"); }}
0 0
- [HDU2509]Be the Winner(博弈Anti-SG+Multi-SG游戏)
- hdu 2509 Be the Winner (Anti-SG游戏+Multi-SG游戏)
- HDU 2509 Be the Winner Anti-SG
- HDU2509 Be the Winner 博弈
- hdu2509 Be the Winner (尼姆博弈)
- HDU2509 Be the Winner Nim博弈
- hdu2509 Be the Winner
- hdu2509 Be the Winner(博弈论---尼姆博弈)
- [HDU3032]Nim or not Nim?(博弈Multi-SG游戏)
- [POJ3537]Crosses and Crosses(博弈Multi-SG游戏)
- [BZOJ2940][Poi2000]条纹(博弈Multi-SG游戏)
- HDU2509:Be the Winner(Nim)
- poj3480(Anti-SG 游戏)
- ZOJ 2507 ANTI-SG博弈
- HDU 1907 John(尼姆博弈之ANTI-SG游戏)
- BZOJ 1022 Anti-SG游戏
- [BZOJ3576][Hnoi2014]江南乐(博弈Multi-SG游戏+数学相关)
- poj 3480 John anti-SG博弈
- 支持向量机
- MS SQL之存储过程一
- 腾讯Bugly设置
- 如何做一个被领导喜欢的实施顾问
- tomcat7和redis的sessoin共享问题处理
- [HDU2509]Be the Winner(博弈Anti-SG+Multi-SG游戏)
- 每天一个linux命令(27):linux chmod命令
- Redux 中文文档
- 数据库操作类,可执行数据库简单操作
- Catalina-Container接口
- 主广告06-兼容IE8和Chrome浏览器
- 自定义View二(加入线程,实现绘制图形动态化)
- MFC之Win7获取当前活动用户与锁屏状态
- 程序员面试金典: 9.3栈与队列 3.2设计一个栈,除pop与push方法,支持返回栈最小元素min方法,时间复杂度均为O(1)