A. Submission Bait (思维)
题意:
A l i c e Alice Alice 和 B o b Bob Bob 正在玩一个数组 a a a 中大小为 n n n 的游戏。
他们轮流进行操作, A l i c e Alice Alice先开始。无法操作的玩家将输掉。首先,将变量 m x mx mx 设置为 0 0 0 。
在一次操作中,玩家可以执行以下操作:
- 选择一个索引 i i i ( 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n ),使得 a i ≥ m x a_{i} \geq mx ai≥mx ,并将 m x mx mx 设置为 a i a_{i} ai 。然后,将 a i a_{i} ai 设置为 0 0 0 。
确定 A l i c e Alice Alice是否有获胜策略。
分析:
考虑最大值的奇偶性,如果有奇数个最大值,那么先手赢。如果是偶数个最大值,那么就要考虑剩下的数字的奇偶性。如果有一个值有奇数个,那么先手赢,否则后手赢
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int t = 1;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 0; i < n; i++) {
int x;
cin >> x;
a[x]++;
}
int flag = 0;
for (int i = n; i; i--) {
if (a[i] & 1) {
flag = 1;
break;
}
}
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
B.Array Craft (思维)
题意:
对于大小为 m m m 的数组 b b b ,我们定义:
- b b b 的最大前缀位置是满足 b 1 + … + b i = max j = 1 m ( b 1 + … + b j ) b_1+\ldots+b_i=\max_{j=1}^{m}(b_1+\ldots+b_j) b1+…+bi=maxj=1m(b1+…+bj) 的最小索引 i i i ;
- b b b 的最大后缀位置是满足 b i + … + b m = max j = 1 m ( b j + … + b m ) b_i+\ldots+b_m=\max_{j=1}^{m}(b_j+\ldots+b_m) bi