尼姆博弈的变种,喜欢坑的童鞋快来吧!点开遇见坑
我的方法比较笨,考虑了很多特殊数据:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n,m,x[10111],i,ken1[2];
scanf("%d",&n);
while (n--)
{
int sum=0,flag=0,ken2=0;
long long ans;
memset(x,0,sizeof(x));
scanf("%d",&m);
for (i=0; i<m; i++)
{
scanf("%d",&x[i]);
sum+=x[i];
if (x[i]>1)
flag++;
}
if (flag==0)
{
if (sum&1)
printf("Hrdv\n");
else
printf("Yougth\n");
}
else if (flag==1)
{
if (m==1)
{
printf("Yougth\n");
}
else
{
for ( i=0; i<n; i++)
{
if (x[i]>1)
{
sum-=x[i];
break;
}
}
if (sum&1)
printf("Yougth\n");
else
printf("Hrdv\n");
}
}
else if (flag==2)
{
for (i=0; i<m; i++)
{
if (x[i]>1)
sum-=x[i];
}
if (sum%2==0)
{
for (i=0; i<m; i++)
{
if (x[i]>1)
ken1[ken2++]=x[i];
}
if (ken1[0]==ken1[1])
printf("Hrdv\n");
else
printf("Yougth\n");
}
else
{
for (i=0; i<m; i++)
{
if (x[i]>1)
ken1[ken2++]=x[i];
}
if (ken1[0]==ken1[1])
printf("Yougth\n");
else
printf("Hrdv\n");
}
}
else
{
ans=x[0];
for ( i=1; i<m; i++)
ans^=x[i];
if (ans==0)
{
printf("Hrdv\n");
}
else
{
printf("Yougth\n");
}
}
}
return 0;
}
另一种方法:
#include<stdio.h>
int main()
{
int T,n,a,i,result,count;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
result=0;
count=0;
for(i=1; i<=n; i++)
{
scanf("%d",&a);
result=result^a;
if(a>1)
count++;
}
if((count&&result)||(!count&&!result))
printf("Yougth\n");
else
printf("Hrdv\n");
}
return 0;
}