欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Codeforces Round #685 (Div. 2)——D. Circle Game

程序员文章站 2022-03-15 23:44:36
...

Codeforces Round #685 (Div. 2)——D. Circle Game
Codeforces Round #685 (Div. 2)——D. Circle Game
思路:比较典型的对称博弈,首先来看一下什么是对称博弈
【博弈规则】:

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;
		}
	}
}