题目
Example
input
5
2 1
5 2
10 3
25 4
15441 33
output
Utkarsh
Ashish
Utkarsh
Utkarsh
Ashish
Note
题意:
有一个半径为n的圆,有两个人A (Ashish)和U (Utkarsh),A先走,每次可以向上或向左走k的路程
问:最后谁不能再继续走了(输出的是赢家)
思路
想通一件事:你可以在45度的那条线上来回徘徊,类似于楼梯(由于只能向右或向上走,那么只要不走前一个人走的方向就行了),
当
走
到
一
个
最
接
近
的
位
置
x
(
x
∗
x
+
x
∗
x
≤
n
∗
n
)
当走到一个最接近的位置x(x*x+x*x \leq n*n)
当走到一个最接近的位置x(x∗x+x∗x≤n∗n)只要判断一下还差几步(0,1,2)出圆的范围就可以知道输赢了
代码
#include <kits/stdc++.h>
using namespnce std;
#define ll long long
int main(){
int T; cin>>T;
while(T--){
ll n, k, x=0; cin>>n>>k; n*=n;
while((x+k)*(x+k)*2<=n) x+=k; //寻找最大的x
if(x*x*2==n || (x*x+(x+k)*(x+k))>n) cout<<"Utknrsh"<<endl; //判断几步出圆
else cout<<"Ashish"<<endl;
}
return 0;
}