HDU 4994 Revenge of Nim(玄学)(Nim问题)
2016-02-24 18:47
260 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4994
给出n堆,然后两个人先后手从A1堆拿到An堆 不能拿的人失败
首先 ,对于一堆的情况,先手必胜。两堆的情况,第二堆的先手必胜。同理可得三堆四堆。
首先设flag=0,表示胜负未定,当开始为连续的1时,当前堆的先后手轮流替换。当这一堆为数目大于1的时候,就代表当前先手可以选择全部拿完或者留一个。即当前堆先手必胜
给出n堆,然后两个人先后手从A1堆拿到An堆 不能拿的人失败
首先 ,对于一堆的情况,先手必胜。两堆的情况,第二堆的先手必胜。同理可得三堆四堆。
首先设flag=0,表示胜负未定,当开始为连续的1时,当前堆的先后手轮流替换。当这一堆为数目大于1的时候,就代表当前先手可以选择全部拿完或者留一个。即当前堆先手必胜
#include<iostream> #include<cstdio> #include<set> #include<string> #include<string.h> #include<cstring> #include<vector> #include<map> #include<queue> #include<stack> #include<cctype> #include<algorithm> #include<sstream> #include<utility> #include<cmath> #define mt(a) memset(a,0,sizeof (a)) #define fl(a,b,c) fill(a,b,c) #define SWAP(a,b,t) (t=a,a=b,b=t) #define inf 1000000 using namespace std; typedef long long ll; int dp[500][300]; #define offset 100 int main() { int T; cin >> T; while (T--) { int n; cin >> n; int flag = 0,who=0; for (int i = 0; i < n; i++) { int m; scanf("%d", &m); if (m>1)flag = 1; if (!flag)who ^= 1; } if ((!who&&flag)||(who&&!flag))printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- 331. Verify Preorder Serialization of a Binary Tree【M】【16】【leetcode】
- 点击导航下的某个栏目,出现在相应区域;滚动到某个区域,导航下的某个栏目相应效果
- UIFont字体大全
- HDU 4993 Revenge of ex-Euclid(暴力)
- java(17)--三层架构示意图
- 【CSS3】变形--原点 transform-origin
- Objective-C 内存管理之 _ARC
- 10步让你成为更优秀的程序员
- C#中的IntPtr类型
- [翻译]AOP编程
- unbantu15.10安装android studio 2.0 beta5
- 八大排序法
- PXE网络引导自动化安装系统详解
- 彻底删除nginx
- javaScript学习笔记(三)
- 快速排列(传说中的快排)
- hadoop面试题
- Masonry 到底有多美?(下)
- PHP魔术方法之__call重载方法
- 数组生成MaxTree——C++