[博弈] Codeforces 1451D

题目链接

题解

后手可以使得先手出发的位置一直在 \(y=x\) 这一条线上。设这样最终会持续 \(s\) 轮,其中 \(s\) 是满足 \(2s^2k^2\leq d^2\) 的最大正整数。假设第 \(s+1\) 轮时先手还能走一步,则 \(s^2k^2+(s+1)^2k^2\leq d^2\),然后后手再走一步,发现 \((s+1)^2k^2+(s+1)^2k^2=2(s+1)^2k^2>2s^2k^2\),而 \(s\) 是满足 \(2s^2k^2\leq d^2\) 的最大正整数,所以 \((s+1)^2k^2+(s+1)^2k^2>d^2\)。 又有 \(s^2k^2+(s+2)^2k^2=2s^2k^2+4sk^2+4k^2>2(s+1)^2k^2>d^2\),所以此时后手无法再走,先手必胜。

所以若 \(s^2k^2+(s+1)^2k^2> d^2\),后手可以一直让先手的出发点处于 \(y=x\) 这一直线上,此时后手必胜。
\(s^2k^2+(s+1)^2k^2\leq d^2\),先手可以一直让后手的出发点处于 \(y=x+k\)\(y=x-k\) 上,此时先手必胜。

Code

for t in range(int(input())):
    d,k=map(int,input().split(' '))
    s=int(((d*d)/(k*k*2))**0.5)
    if (s*k)**2+(s+1)**2*k*k>d*d: print('Utkarsh')
    else: print('Ashish')
posted @ 2020-11-22 14:07  AE酱  阅读(132)  评论(0编辑  收藏  举报