hdu 3537 Daizhenyang's Coin(博弈-翻硬币游戏)
来源:互联网 发布:淘宝店铺怎么看购物车 编辑:程序博客网 时间:2024/05/21 08:07
题意:每次可以翻动一个、二个或三个硬币。(Mock Turtles游戏)
初始编号从0开始。
当N==1时,硬币为:正,先手必胜,所以sg[0]=1.
当N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2。
当N==3时,硬币为:反反正,先手必赢,先手操作后可能为:反反反、反正反、正反正、正正反,方案数为4,所以sg[2]=4。
位置x:0
sg[x]:
看上去sg值为2x或者2x+1。我们称一个非负整数为odious,当且仅当该数的二进制形式的1出现的次数是奇数,否则称作evil。所以1,2,4,7是odious因为它们的二进制形式是1,10,100,111.而0,3,5,6是evil,因为它们的二进制形式是0,11,101,110。而上面那个表中,貌似sg值都是odious数。所以当x为odious时,sg值是2x,当x是evil时,sg值是2x+1.
这样怎么证明呢?我们会发现,
假设刚才的假说是成立的,我们想证明下一个sg值为下一个odious数。注意到我们总能够在第x位置翻转硬币到达sg为0的情况;通过翻转第x位置的硬币和两个其它硬币,我们可以移动到所有较小的evil数,因为每个非零的evil数都可以由两个odious数异或得到;但是我们不能移动到下一个odious数,因为任何两个odious数的异或都是evil数。
假设在一个Mock Turtles游戏中的首正硬币位置x1,x2,…,xn是个P局面,即sg[x1]^…^sg[xn]=0.那么无可置疑的是n必定是偶数,因为奇数个odious数的异或是odious数,不可能等于0。而由上面可知sg[x]是2x或者2x+1,sg[x]又是偶数个,那么x1^x2^…^xn=0。相反,如果x1^x2^…^xn=0且n是偶数,那么sg[x1]^…^sg[xn]=0。这个如果不太理解的话,我们可以先这么看下。2x在二进制当中相当于把x全部左移一位,然后补零,比如说2的二进制是10,那么4的二进制就是100。而2x+1在二进制当中相当于把x全部左移一位,然后补1,比如说2的二进制是10,5的二进制是101。现在看下sg[x1]^…^sg[xn]=0,因为sg[x]是2x或者2x+1,所以式子中的2x+1必须是偶数个(因为2x的最后一位都是0,2x+1的最后一位都是1,要最后异或为0,2x+1必须出现偶数次)。实际上的情况可能是这样的:
MT游戏当中的P局面是拥有偶数堆石子的Nim游戏的P局面。
// Time 15ms; Memory 304K
#include<iostream>#include<algorithm>using namespace std;int main(){int n,a[110],s,i,t,p;while(cin>>n){s=0;for(i=0;i<n;i++){cin>>a[i];}sort(a,a+n);for(i=0;i<n;i++) if(i==0 || a[i]!=a[i-1]){t=a[i];p=0;while(t){if(t%2) p++;t/=2;}if(p%2) s^=2*a[i];else s^=2*a[i]+1;}if(s) cout<<"No"<<endl;else cout<<"Yes"<<endl;}return 0;}
- hdu 3537 Daizhenyang's Coin(博弈-翻硬币游戏)
- HDU 3537 Daizhenyang's Coin (博弈论、翻硬币游戏)
- HDU 3537 Daizhenyang's Coin (经典翻硬币博弈问题)
- HDU 3537 Daizhenyang's Coin 翻硬币博弈
- HDOJ 3537 Daizhenyang's Coin (翻硬币游戏)
- hdu3537 Daizhenyang's Coin 翻硬币,(Mock Turtles游戏)
- HDU 3537 Daizhenyang's Coin(博弈-sg)
- hdu 3537 Daizhenyang's Coin 博弈(Nim游戏+sg定理+找规律)
- HDU 3537 Daizhenyang's Coin
- 【hdu 3537】Daizhenyang's Coin
- HDU 3537 Daizhenyang's Coin (Mock Turtles 游戏)
- HDU3537-Daizhenyang's Coin(博弈SG-打表)
- HDOJ 3537 Daizhenyang's Coin
- 博弈-翻硬币游戏
- 博弈-翻硬币游戏
- 博弈-翻硬币游戏
- 博弈-翻硬币游戏
- 博弈—翻硬币游戏
- windows环境下Socket编程的几种模式
- SharePoint 2013 母版页取消和HTML页关联
- hdu 1242 Rescue_bfs+优先队列
- DOM自定义属性 getAttribute、setAttribute、removeAttribute
- Exchange Server 2013 一步步安装图解[完全步骤截图]
- hdu 3537 Daizhenyang's Coin(博弈-翻硬币游戏)
- 中国汽车价格为什么比国外贵那么多
- Windows完成端口与Linux epoll技术简介
- VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
- 【deep learning学习笔记】最近读的几个ppt(四)
- Spring 事务注解
- cdev结构体
- FlexPaper+SWFTools 实现仿百度文库及一些小问题
- IOCP以及扩展Windows socket函数应用示例