[HDU2509]Be the Winner(博弈Anti-SG+Multi-SG游戏)
2016-12-23 08:56
459 查看
题目描述
传送门题解
就是一个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 105 int n,ans,Max; int a ,sg ; int get_sg(int x) { if (sg[x]!=-1) return sg[x]; bool ext ;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"); } }
相关文章推荐
- hdu 2509 Be the Winner (Anti-SG游戏+Multi-SG游戏)
- HDU 2509 Be the Winner Anti-SG
- hdu2509 Be the Winner(博弈论---尼姆博弈)
- hdu2509 Be the Winner 博弈
- HDU Be the Winner [Anti-SG]
- HDU 2509 Be the Winner(取火柴博弈2)
- HDU2509 Be the Winner 博弈
- HDU2509 Be the Winner
- hdu 2509 Be the Winner(博弈Nim)
- ACM HDU 2509 Be the Winner(博弈)
- HDU 2509 Be the Winner (Nim博弈)
- hdu 2509 Be the Winner(博弈Nim)
- HDU-2509-Be the Winner,博弈题~~水过~~
- hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)
- HDU 1907 John(尼姆博弈之ANTI-SG游戏)
- HDU 2509 Be the Winner && HDU 1907 John (Nim博弈变形)
- (step8.2.2)hdu 2509(Be the Winner——简单博弈)
- HDU2509 Be the Winner(反NIM)
- HDU2509:Be the Winner(Nim)
- hdoj 2509 Be the Winner 【博弈】