题目
思路
首先需要明确,每一次操作都会减少一张卡片,因此在最后一次操作时还剩两张卡片,这两张卡片有三种情况:全是偶数、全是奇数、一奇一偶。
如果最后一次是
N
i
u
M
e
i
NiuMei
NiuMei,她需要偶数,有三种方法可以获得:
奇
数
+
奇
数
,
偶
数
+
偶
数
,
偶
数
∗
奇
数
奇数+奇数 ,偶数+偶数 ,偶数*奇数
奇数+奇数,偶数+偶数,偶数∗奇数,因此无论剩下什么,牛妹都可以赢。
如果最后一次是
N
i
u
N
i
u
NiuNiu
NiuNiu,他需要奇数,有两种方法可以获得:
奇
数
∗
奇
数
,
奇
数
+
偶
数
奇数*奇数,奇数+偶数
奇数∗奇数,奇数+偶数,因此只要有奇数,他就能赢
再分析一下情况,牛牛是没有办法增加奇数的个数的,因为没有操作把两个偶数变成奇数
牛妹就是要减少奇数的个数,让最后两个数都是偶数,牛妹一次最多减少两个奇数(奇数+奇数 = 偶数)
因为牛妹一次操作可以减少两个奇数,所以只需要判断奇数的个数和牛妹操作次数*2的大小即可
代码
#include<cmath>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int MOD = 2333;
const int N = 1e6 + 5;
const int INF = 0x3f3f3f3f;
typedef long long ll;
void work() {
int n; cin >> n;
int odd = 0;
for (int i = 1; i <= n; i++) {
int tmp; cin >> tmp;
if (tmp & 1) odd++;
}
if (n == 1) {
if (odd) cout << "NiuNiu" << '\n';
else cout << "NiuMei" << '\n';
return;
}
if (n & 1)
cout << "NiuMei" << '\n';
else {
int num = (n >> 1) - 1;
if (num * 2 >= odd) cout << "NiuMei" << '\n';
else cout << "NiuNiu" << '\n';
}
}
int main() {
BUFF;
/*int T; cin >> T;
while (T--)*/
work();
return 0;
}