思路:比较典型的对称博弈,首先来看一下什么是对称博弈
【博弈规则】:
n 个棋子围成一圈, 两人轮流从中取走一或两个棋子, 不过取两个时必须是连续的
棋子. 棋子取走之后留下空位, 相隔空位的棋子不连续。取走最后一个棋子的获胜。
【博弈分析】:
当n ≤ 2 n\leq2n≤2,先手必胜。
当n ≥ 3 , n\geq3,n≥3,先手必败。无论先手怎么拿,后手都可以构造出不连通对称局面,模仿先手即可获胜。
因为从原点出发,如果第一个人移动,第二个人的最优就是走另一个方向,直到有一个人出局
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
int main()
{
cin>>t;
while(t--){
ll d,k;
cin>>d>>k;
ll x = 0,y = 0;
int f1 =0,f2 = 0;
while(x*x+y*y<=d*d){
x+=k;
if(x*x+y*y>d*d){
f1 = 1;
break;
}
y+=k;
if(x*x+y*y>d*d){
f2 = 1;
break;
}
}
if(f1==1){
cout<<"Utkarsh"<<endl;
}
else if(f2==1){
cout<<"Ashish"<<endl;
}
}
}