sdut 2161 Simple Game 博弈
来源:互联网 发布:windows重启数据库 编辑:程序博客网 时间:2024/06/10 18:39
题意:
N堆石子,每堆有ai个,轮流取,每次最多从3堆石子中取(可以取不同)。问先手是否能必胜
分析:
最普通的尼姆游戏是从1堆中取,本题是从3堆中取,推广成k堆呢?
对于尼姆博弈我们的做法是把所有的数异或最后判断最后值是否大于0
对于本题的必败态有:
1 1 1 1 2 2 2 2 3 3 3 3 1 2 3 3 3 1 3 4 4 4 1 5 6 6 6 2 4 6 6 6 2 5 7 7 7 1 1 2 2 3 3 1 1 1 2 2 2 3
可以发现如果是4堆切数目一样的数那么一定是必败态,而且把一个必败态对应的石子进行移动就会获得新的必败态
如 3 3 3 3---》 1 2 3 3 3 ---》1 1 2 2 3 3---》1 1 1 2 2 2 3
把每个数转化成二进制来看发现一个规律 :只要二进制某一位出现1的数目不是4=(1+3)的整数倍就先手赢
例如:
1 1 1 1
第三位
第二位
第一位
0
0
1
0
0
1
0
0
1
0
0
1
Sum
0
0
4
1 2 3 3 3
0
0
1
0
1
0
0
1
1
0
1
1
0
1
1
Sum
0
4
4
1 2 2 2 2
0
0
1
0
1
0
0
1
0
0
1
0
0
1
0
Sum
0
4
1
所以先手的策略就是把每一位上的数字和都搞成3+1的倍数。
怎么搞呢:找到最高的和不是3+1倍数的那一位,假设是有N个1,挑N%(3+1)个数字,把这一位的1变成0,那么这些数字的剩下几位就可以任自己决定了。
然后往低位一位位移过去,如果某一位上就算怎么改都到不了3+1的倍数,就挑几个当前位为1的数字进来,把1变成0,那可控数字就增加了,最多可以增加到3个,那3个可控数字就肯定可以把剩下的任意一位上的和搞成3+1倍数。
推广到每次取k堆也是一样的做法就是把3替换成k
ACcode:
#include <bits/stdc++.h>using namespace std;#define maxn 10005int bin[15];int main(){ int loop,n; scanf("%d",&loop); while(loop--){ scanf("%d",&n); memset(bin,0,sizeof(bin)); for(int i=0;i<n;++i){ int t; scanf("%d",&t); for(int i=0;t;++i){ if(t%2)bin[i]++; t/=2; }// for(int j=0;j<4;++j)cout<<bin[j]<<' ';cout<<'\12'; } int flag=true; for(int i=0;flag&&i<15;++i)if(bin[i]%4)flag=false; if(flag)puts("No"); else puts("Yes"); } return 0;}
- sdut 2161 Simple Game 博弈
- Game! SDUT(环形博弈)
- sdut 3253 Game! 博弈
- hdu1851_A Simple Game博弈—SG函数
- A simple stone game (poj3922,博弈)
- HDU(1851) A Simple Game (博弈)
- hdu1851 A Simple Game bash博弈+Nim博弈
- sdut 2161 Simple Game(山东省第二届acm省赛A题)(博弈论Nim+Bush?)
- HDOJ 题目1851A Simple Game(简单sg博弈)
- A simple stone game - HDU 2486 K倍递减博弈
- hdu 1851 A Simple Game Java 水题系列 博弈
- hdu 1851 A Simple Game (Nim博弈)
- hdoj 1851 A Simple Game(组合博弈, sg函数)
- A Simple Game(巴什博弈和尼姆博弈)
- game--博弈
- Simple Game
- Simple Game
- Simple Game
- centOS下tar: bzip2: Cannot exec: No such file or directo
- JavaScript数字精度丢失问题总结
- 大数据自学
- 数据库事务隔离级别(二) 之 典例篇
- Zeroc Ice开发环境搭建
- sdut 2161 Simple Game 博弈
- csdn 访问终于过百万
- 在Windows下搭建React Native Android开发环境
- Python-day8
- Java(四) Java核心技术-目录
- springMVC结合Jcrop实现头像上传裁剪预览功能
- Shell判断字符串包含关系的几种方法
- 《ZeroC Ice 权威指南》笔记
- 半闲居士视觉SLAM十四讲笔记(3)三维空间刚体运动