取石子(九)
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
最近TopCoder的Yougth和Hrdv在玩一个游戏,游戏是这样的。
有n堆石子,两个人轮流从其中某一堆中任意取走一定的石子,最后不能取的为赢家,注意: 每次只能从一堆取任意个,可以取完这堆,但不能不取。
假设Yougth先取,输入赢了的人名字、
-
输入
-
第一行输入n,代表有n组测试数据(n<=10000)
以下每组测试数据包含两行:第一行:包含一个整数m,代表本组测试数据有m(m<=1000)堆石子;
:第二行:包含m个整数Ai(Ai<=10000),分别代表第i堆石子的数量。
输出
- 若Yougth赢输出“Yougth”,否则输出“Hrdv”注意每组结果占一行。。 样例输入
-
3 2 1 1 3 3 8 11 2 5 10
样例输出
-
Yougth Hrdv Yougth
尼姆博弈的变式:统计所有堆石子中数量大一1的堆数,并将所有数字异或一遍,若大于1的个数和异或结果同时为0或同时不为0,则先手胜利,否则后手胜利。代码如下:
#include <stdio.h>
#include <math.h>
int main(){
int t,n,m,ans,cnt;
scanf( "%d",&t );
while( t-- ){
ans = 0;
cnt = 0;
scanf( "%d",&n );
while( n-- ){
scanf( "%d",&m );
if( m>1 )
cnt++;
ans ^= m;
}
if( cnt==0 && ans==0 || cnt!=0 && ans!=0 )
printf( "Yougth\n" );
else
printf( "Hrdv\n" );
}
}