题目描述:
题目大意: Mike 和 Joe 轮流取围成圆圈的若干堆石子,如果某人不能取石子了,则此人输。
思想:
如果 n 为奇数?
Mike 先手每次都取完,那么最后一次 Joe 要取第一堆石子时,该堆石子为空,则先手必胜。
假如 n 为偶数呢?
n 为偶数,那么两人取的石子的堆数序号是不变的,先手只可取奇数堆,后手每次取偶数堆,那么这将是一场消耗战,每个人都会在每一次取石子中取出一颗石子。胜负取决于两人的短板。我们找到最小的一个数,看它是在奇数堆还是偶数堆即可。
AC代码:
void solve() {
int n; cin >> n;
vector<int> a(n + 1);
int minvalM = INT_MAX; int minvalJ = INT_MAX;
ll s1 = 2e9;
int idx = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i] < s1) s1 = a[i], idx = i;
}
if (n % 2) {
cout << "Mike" << endl; return;
}
else {
if (idx & 1) cout << "Joe"<<endl;
else cout << "Mike"<<endl;
}
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
}