对于后手,最优的方案是,每次 后手选择与先手相反的操作,这样点最终将会在对角线上,如果不能继续走,就后手胜利,否则先手胜利;
接下来只需要二分对角线上的最大距离,求出最大多少个k,再判断是否还能走下一步。
#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
const int N = 1 << 19;
const int mod = 1e9 + 7;
/**
* 不要使用#define int long long
* 不开long long见祖宗
* ----YuFei Zhou
*/
void solve() {
ll d,k;
cin>>d>>k;
ll l = 0,r = d;
while (l < r){ //二分找到对角线上的最大的距离(整数)
ll mid = (l+r+1) >> 1;
if(mid*mid*2 <= d*d) {
l = mid;
}else{
r = mid - 1;
}
}
ll ans = (l/k) * k;//计算最大对角线上最大举例为多少个k
if(ans*ans + (ans+k)*(ans+k) <= d*d){ //如果还能走一步就是后手赢,否则先手赢
cout<<"Parry";
} else{
cout<<"Mercedes";
}
cout<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
int t = 1;
cin>>t;
while(t--){
solve();//1 2 3 4 5
}
return 0 ;
}

京公网安备 11010502036488号