Loading

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;//完结撒花
}
posted @ 2024-07-25 15:02  God_Max_Me  阅读(4)  评论(0编辑  收藏  举报