题目链接
题目思路
官方题解写的很好了,我直接copy
n=1需要特判(很重要)
如果n不等于1,可以发现,如果最后一次操作是后手进行,则后手必胜。(奇数+奇数=偶数,偶数乘以任何数都等于偶数)。
否则如果初始状态有至多一个偶数,先手总有办法把局面变成全部都是奇数然后交给后手,后手至多产生一个偶数,因此给先手时局面不变。在最终时由于最多只有一个偶数,所以先手必胜。
反之,如果初始状态有至少两个偶数,无论先手怎么操作,后手还给先手的时候一定还有至少两个偶数,所以先手最后面对的局面就是两个偶数,后手必胜。
代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const int eps=1e-6;
int n,a[maxn],cnt;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]%2==0) cnt++;
}
if(n==1){
if(cnt==0){
cout<<"NiuNiu";
}else{
cout<<"NiuMei";
}
}else{
printf(n%2==0&&cnt<2?"NiuNiu":"NiuMei");
}
return 0;
}