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;
		}
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值