NYOJ 585 取石子(六)(尼姆博弈)
2017-07-25 19:51
169 查看
取石子(六)
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述最近TopCoder的PIAOYI和HRDV很无聊,于是就想了一个游戏,游戏是这样的:有n堆石子,两个人轮流从其中某一堆中任意取走一定的石子,最后不能取的为输家,注意: 每次只能从一堆取任意个,可以取完这堆,但不能不取。假设PIAOYI先取石子,请你帮他判断他是否能赢(假设他们取的过程中不发生失误,他们足够聪明
)。
输入第一行输入n,代表有n组测试数据(n<=10000)
以下每组测试数据包含两行:第一行:包含一个整数m,代表本组测试数据有m(m<=1000)堆石子;
:第二行:包含m个整数Ai(Ai<=100),分别代表第i堆石子的数量。
输出若PIAOYI赢输出“PIAOYI”,否则输出“HRDV”注意每组结果占一行。。
样例输入
3 2 1 1 3 3 8 11 2 5 10
样例输出
HRDV HRDV PIAOYI
来源
原创
方法一:
#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m;
scanf("%d",&m);
if(!m)
{
printf("HRDV\n");
continue;
}
int temp;
scanf("%d",&temp);
for(int i=1;i<m;i++)
{
int a;
scanf("%d",&a);
temp^=a;
}
if(!temp)//注意这里写成temp==0会超时,至于原因我也不知道,若有知道的,欢迎留言
printf("HRDV\n");
else printf("PIAOYI\n");
}
return 0;
}
方法二:在别人那里看到的,
//用字符串来处理数字 在数据很大的时候能省时间 //sum ^= n%(m+1);
#include <stdio.h> #include <string.h> int main() { int n,m,ans,a[1000]={0},i; char ch; scanf("%d",&n); while(n--) { scanf("%d",&m); memset(a,0,sizeof(a)); ans = 0; getchar(); for(i=0;i<m;i++) { while((ch=getchar())>='0' && ch <= '9') a[i] = 10*a[i] + ch - '0'; } for(i=0;i<m;i++) ans ^= a[i]; if(ans) printf("%s\n","PIAOYI");//puts("PIAOYI"); else printf("%s\n","HRDV");//puts("HRDV"); //printf("%s\n",ans?"PIAOYI":"HRDV"); } return 0; }
相关文章推荐
- NYOJ题目585 取石子(六)hdu 题目1850Being a Good Boy in Spring Festival 尼姆博奕(Nimm Game)
- nyoj 585 取石子(六) 【Nim】
- nyoj 585 取石子(六) 【Nim】
- 南阳 585 取石子(六)(尼姆博弈)
- nyoj 取石子(三)(尼姆博弈的定理运用)
- 取石子(六)_nyoj_585(博弈-奇异矩阵).java
- nyoj585 取石子(六) Nimm博弈
- NYOJ 题目585取石子(六)(nim博弈)
- 取石子(六)_nyoj_585(博弈-奇异矩阵).java
- NYOJ 135 取石子(二) (巴什博弈+尼姆博弈)(SG函数)
- nyoj-585-取石子(六)
- NYOJ 135 取石子(二)(巴什博奕+尼姆博弈)
- NYOJ 585 取石子(六)
- NYOJ 585 取石子(六)
- NYOJ 135 取石子(二)(博弈)
- NYOJ 833 取石子(七)
- 区间DP-NYOJ737石子合并
- nyoj 取石子系列
- 取(m堆)石子游戏(尼姆博弈)
- NYOJ 737 石子合并(一)(区间dp)