HDU 4994Revenge of Nim(玄学)(Nim问题)

来源:互联网 发布:合肥气象数据 编辑:程序博客网 时间:2024/06/05 07:57

http://acm.hdu.edu.cn/showproblem.php?pid=4994


给出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 1000000using namespace std;typedef long long ll;int dp[500][300];#define offset 100int 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;}


0 0