1、【题意】
有n堆水果,两人依次取,每次只能取一堆中的几个或者全部,最后一个去完的为胜。
【思路】
nim裸模板,直接异或就好。
【代码】
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int INF=1e9;
typedef unsigned long long ll;
typedef long long LL;
int main()
{
int n;
while(~scanf("%d",&n))
{
int x=0,y;
for(int i=0; i<n; i++)
{
scanf("%d",&y);
x^=y;
}
if(x==0)
puts("No");
else
puts("Yes");
}
}
2、【题意】
有n堆水果,两人依次取,每次只能取一堆中的几个或者全部,最后一个去完的为输。
【思路】
需要特判是否每个堆均为1的情况。
【代码】
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int INF=1e9;
typedef unsigned long long ll;
typedef long long LL;
int main()
{
int n;
while(~scanf("%d",&n))
{
int x=0,y,flag=0;
for(int i=0; i<n; i++)
{
scanf("%d",&y);
x^=y;
if(y>1)
flag=1;
}
if(!flag)
{
if(n&1)
puts("No");
else
puts("Yes");
}
else
{
if(x==0)
puts("No");
else
puts("Yes");
}
}
}