CF1695B Circle Game 题解
1.思路
这是一道模拟题,我们不妨来思考一下必胜策略。当 $ n $ 为奇数时,$ Mike $ 只需要在第一轮将第一堆石子全部取走,接下来都拿奇数位置的石子便可以必胜。如果 $ n $ 为偶数,$ Mike $ 会一直拿奇数位置的石子,$ Joe $ 会一直拿偶数位置的石子。所以我们要找到一个石子数最小的石子堆,用 $ ans $ 记录它的位置。判断这个 $ ans $ 的奇偶性,如果为奇就 $ Joe $ 赢,如果为偶则 $ Mike $ 赢。
2.代码
#include<bits/stdc++.h>
using namespace std;
int t,stone[205],n;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;//数据组数
while(t--){
cin>>n;//石子堆数
for(int i=1;i<=n;i++)
cin>>stone[i];
if(n%2==1){//Mike必胜情况
cout<<"Mike"<<endl;
continue;
}
int ans=1;
for(int i=1;i<=n;i++)
if(stone[i]<stone[ans])
ans=i;//找到石子堆中数量最少的,记录位置
if(ans%2==1)
cout<<"Joe"<<endl;//Joe必胜
else
cout<<"Mike"<<endl;//Mike必胜
}
return 0;//完结撒花
}