题意
博弈游戏,开始坐标 ( 0 , 0 ) (0,0) (0,0),给出正整数 d , k d,k d,k每个人每轮都可以给 x + k x+k x+k或者 y + k y+k y+k,但是必须保证 x ∗ x + y ∗ y < = d x*x+y*y<=d x∗x+y∗y<=d,不能操作的人输。
解析
很简单的思路,就是后手如果和先手反着来, x x x和 y y y就一直相等,我们判断一下,假设执行k轮, ( t ∗ k + t ∗ k ) < = d (t*k+t*k)<=d (t∗k+t∗k)<=d,到达这种状态以后,只能朝一个方向走,朝一个方向走的次数为奇数,就是先手胜利,偶数就是后手胜利。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int mod=1e9+7;
int main() {
int n;
cin>>n;
while(n--){
ll d,k;
cin>>d>>k;
ll dis=0;
while(dis*dis*2<=d*d)dis+=k;
dis-=k;
ll g=dis+k;
ll cnt=0;
while(g*g+dis*dis<=d*d){
cnt++;
g+=k;
}
if(cnt&1){
puts("Ashish");
}
else{
puts("Utkarsh");
}
}
}