1907 John
来源:互联网 发布:内网演示软件 编辑:程序博客网 时间:2024/05/17 04:36
题意:
在一个盒子里面有不同颜色的糖果,John和Brother轮流在里面取糖果吃,每次都是John先取。
每次只能取同一种颜色的若干个糖果,不能不取,最后取走糖果的人输。
输出赢家。
思路:
这是一道裸的尼姆博弈,把同一种颜色的看成一堆,就直接套定理的结果就可以了。
如果有不知到尼姆博弈的可以看一下这篇文章
http://www.wutianqi.com/?p=1081
写的不错。
S为利己态,T为利他态。(这个利就是让谁取最后一个)
S0代表超过1的堆数有0个的利己态,S1代表有一个,S2代表有两个或两个以上。T0、T2同理。
必胜态:S2、S1、T0
必输态:T2、S0
Code:
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<string>#include<queue>#include<stack>#include<bitset>#include<set>#include<map>#include<cctype>#include<vector>#define TEST#define LL long long#define Mt(f, x) memset(f, x, sizeof(f));#define xep(i, n) for(int i = 0; i < (n); ++i)#define rep(i, s, e) for(int i = (s); i <= (e); ++i)#define dep(i, s, e) for(int i = (s); i >= (e); --i)#ifdef TEST #define See(a) cout << #a << " = " << a << endl; #define See2(a, b) cout << #a << " = " << a << ' ' << #b << " = " << b << endl; #define debug(a, s, e){ rep(_i, s, e) {cout << a[_i] << ' '; }cout << endl;} #define debug2(a, s, e, ss, ee) rep(i_, s, e) {debug(a[i_], ss, ee);}#else #define See(a) {} #define See2(a, b) {} #define debug(a, s, e) {} #define debug2(a, s, e, ss, ee) {}#endifconst int MAX = 2e9;const int MIN = -2e9;const int PI = acos(-1.0);const double eps = 1e-8;using namespace std;const int N = 55;int a[N];int nimm(int n)//求状态是T还是S{ int ret = a[0]; for(int i = 1; i < n; ++i) { ret ^= a[i]; } return ret;}int main(){ int T; cin >> T; while(T--) { int n; scanf("%d", &n); int tem = 0, state; for(int i = 0; i < n; ++i) { scanf("%d", &a[i]); if(a[i] != 1) { ++tem; } } state = nimm(n); bool win; if(state) { if(tem == 0) { win = false; } else { win = true; } } else { if(tem == 0) { win = true; } else { win = false; } } printf("%s\n", win ? "John" : "Brother"); } return 0;}
0 0
- 1907 John
- HDU 1907 John
- hdu 1907 John
- HDU 1907 - John
- hdu 1907 John
- Hdu 1907 John
- HDU 1907 John
- HDU 1907 John 尼姆博奕
- [博弈]HDU 1907 John
- John(hdu 1907 2509)
- HDU-1907 John
- hdu 1907 John
- hdu 1907 John
- hdu 1907 John
- John - HDU 1907 博弈论
- HDU 1907 John
- hdu oj 1907 john
- hdu 1907 John 尼姆博奕
- 使用TCmalloc的堆栈检查
- android Theme使用总结
- 开发板tftp 程序时,出现timeout 之我的故障
- Lua 的编辑调试系列教材(一)
- mysql索引当中的几个概念和原理
- 1907 John
- cer证书签名验证
- 使用filechannel高效拷贝数据
- vs2010设置boost开发环境
- 物距,像距,焦距了解
- 二十岁出头,你一无所有,但你却拥有一切
- Hadoop环境搭建
- java语言中的数组(五)
- android File类的用法:File.exists()错误、File.mkdir()错误等创建删除的解决办法