D. Dot(思维+记忆化搜索dfs)

news2024/11/18 10:22:23

翻译:

 

D. 点

时间限制:3秒

内存限制:256兆字节

输入:标准输入

输出:标准输出

Anton和Dasha喜欢在棋盘纸上玩不同的游戏。到11年级时,他们成功玩过了所有这类游戏,并请程序员Vova想出一个新的游戏。Vova建议他们玩一个名为“点”的游戏,规则如下:

在棋盘纸上绘制一个坐标系。一个点最初放在位置(x, y)上。
移动是将一个点移动到预选向量中的一个。每个玩家还可以每局游戏对点相对于直线y = x进行对称反射一次。
Anton和Dasha轮流进行。Anton先行动。
如果在某个玩家的回合中,点到坐标原点的距离超过d,则该玩家输掉游戏。
帮助他们确定赢家。

输入

输入文件的第一行包含4个整数x,y,n,d(-200 ≤ x,y ≤ 200,1 ≤ d ≤ 200,1 ≤ n ≤ 20)-点的初始坐标,距离d和向量的数量。保证初始点距离坐标原点的距离小于d。接下来的n行每行包含两个非负整数xi和yi(0 ≤ xi,yi ≤ 200)-第i个向量的坐标。保证所有向量均为非零且不同。

输出

如果在两个玩家都按最佳方式进行游戏的情况下,获胜者是Anton,则输出“Anton”,否则输出“Dasha”。

示例

输入
0 0 2 3
1 1
1 2
输出
Anton

输入
0 0 2 4
1 1
1 2
输出
Dasha

注意
在第一个测试中,Anton选择向量(1, 2),Dasha输掉游戏。在第二个测试中,Dasha在她的第一次移动中将点移动到坐标(2, 3),Anton输掉游戏,因为他只有一种可能的移动方式-相对于直线y = x进行反射。Dasha将以相同的方式回应,并将点返回到位置(2, 3)。

思路:

这个问题可以通过模拟游戏的过程来解决。我们可以使用两个变量来追踪点的当前坐标,然后根据规则进行移动和反射操作。在每个玩家的回合,我们都会选择使得点移动到离原点更远的位置。首先我们进入游戏的循环,交替进行Anton和Dasha的回合,直到有一个玩家输掉游戏。在每个回合中,我们根据当前点的坐标和可用的向量,选择一个使得点移动到离原点更远的位置。如果没有可行的移动操作,即点已经超出了距离限制d,则当前玩家输掉游戏。除了移动操作之外,每个玩家还可以选择对点进行一次反射操作。反射操作将点的坐标相对于直线y = x进行对称反射。我们可以通过交换点的x坐标和y坐标来实现这个反射。最后,我们根据游戏的结果输出Anton或Dasha作为获胜者。

解法:

首先我们可以发现题目中的点可以移动到y=x的对称点这条件没用,因为一个人使用了这个条件,另一个人也可以使用它使点回到刚刚的位置。然后问题就转化为 给个初始点,然后两个人轮流移动一段距离,当点和原点的距离大于d时失败。记忆化搜索就行了。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
const int INF=2e18;
int d,n;
struct node{
	int x,y; 
}a[N];
int f[500][500];
int get_dist(int a,int b){
	return (a-200)*(a-200)+(b-200)*(b-200)<=d*d;
}
int dfs(int x,int y){
	int xx,yy;
	if(f[x][y]) return f[x][y];
	for(int i=1;i<=n;i++){
		xx=x+a[i].x;
		yy=y+a[i].y;
		if(get_dist(xx,yy)){
			if(dfs(xx,yy)==2){
				return f[x][y]=1;
			}
		}
	}
	return f[x][y]=2;
}
void solve(){
	int x,y;
	cin>>x>>y>>n>>d;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y;
	}
	if(dfs(x+200,y+200)==1) cout<<"Anton\n";
	else cout<<"Dasha\n";
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0); 
	int t=1;
	while(t--){
		solve();
	}
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 Leaflet 的缩放功能:在最后一层瓦片缺失时进行优化

这里写自定义目录标题 第一种方式第二种方式第三种方式 引言&#xff1a;Leaflet 是一个广泛使用的开源 JavaScript 库&#xff0c;用于创建交互式、可定制的地图应用程序。在 Leaflet 中&#xff0c;默认情况下&#xff0c;瓦片地图是通过切分成多个瓦片来展示的&#xff0c;这…

华为防火墙之NAT技术

1.源NAT 源NAT技术对IP报文的源地址进行转换&#xff0c;将私网IP地址转换成公网IP地址&#xff0c;使大量私网用户可以利用少量公网IP地址访问Internet&#xff0c;大大减少了对公网IP地址的消耗。 源NAT转换的过程如下图所示&#xff0c;当私网用户访问Internet的报文到达防…

Ubuntu终端最大化的3种方法

摘要&#xff1a;Ubuntu 系统下&#xff0c;使用Ctrl Alt T 快捷键唤醒终端时默认大小为 80 列 x 24 行。在某些测试中我们需要更大的窗口&#xff0c;而通过鼠标将窗口最大化太慢了&#xff0c;所以本文介绍了快速实现终端窗口最大化的 3 种方法。 声明&#xff1a;本文所有…

java安全——Java 默认沙箱

Java安全 Java 默认沙箱 程序设计者或者管理员通过改变沙箱的参数从而完成权限的变动更新 Java默认沙箱的设计目的是为了保护系统和用户的安全。Java虚拟机提供了一种机制&#xff0c;让Java应用程序在一个受限的环境中运行&#xff0c;也就是“沙箱”。这个沙箱能够在应用程序…

微信支付证书过期了怎么办

什么是商户API证书&#xff1f;如何获取商户API证书&#xff1f; 微信原文档&#xff1a;https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 注&#xff1a;正常情况下&#xff0c;微信商户平台的密钥不需要更新重置&#xff0c;站点妥善保存密钥&#xff0c;定期更新证书即…

【adb指令】

一、什么是adb adb的全称为Android Debug Bridge&#xff0c;官方提供的用于操作安卓设备的工具。 二、adb用来干什么&#xff1f; 在电脑终端通过命令行&#xff1a; 打开收手机应用&#xff1b;传输文件&#xff1b;点击、输入、滑动等&#xff1b;硬件操作、返回、回到首…

踩坑记录:nuxt3 - ssg 重构我的前端导航网站

一、&#x1f4a5; 背景故事 不久前我利用周末搭建了个 万能导航网站&#xff0c;当时还写了篇文章&#xff1a;# 我给自己搭建的前端导航网站&#xff0c;你们都别用&#x1f92a;。本来我以为不会有太大的访问量&#xff0c;主要是方便自己用。没想到用的人还不少&#xff0…

maven 远程仓库 查找jar mvnrepository.com

https://mvnrepository.com 搜索包 找到指定版本 下载包或者配置文件引用

WORDPRESS REST API 学习

WORDPRESS 的 REST API 本身是没有身份验证的&#xff0c;我安装了 miniOrange 的 WordPress REST API Authentication 免费部分只有 Basic Authentication 和 JWT Authentication &#xff0c; 作为学习 REST API 够用了。 一般使用 postman 测试 api &#xff0c;后来卸载了…

通用分页【上】之后端代码

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于通用分页的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 导读&#xff1a; &#x1f4a1;辉辉小…

git创建分支提示fatal: not a valid object name: ‘master‘解决方案

文章目录 1. 背景描述&#xff1a;2. 原因分析&#xff1a;3. 解决方案&#xff1a; 1. 背景描述&#xff1a; 在本地使用 git init初始化一个空的git项目后&#xff0c;想使用git branch创建分支时&#xff0c;提示fatal: not a valid object name: ‘master’。 2. 原因分…

【react全家桶学习】react的 (新/旧) 生命周期(重点)

目录 生命周期&#xff08;旧&#xff09; 挂载时的生命周期 constructor&#xff08;props&#xff09; componentWillMount&#xff08;&#xff09;-------------新生命周期已替换 render&#xff08;&#xff09; componentDidMount&#xff08;&#xff09;--- 组件…

【MHA高可用配置及故障切换】

目录 一、案例概述1、传统的MySQL主从架构存在的问题1.1、单点故障 2、HMA的简介2.1、HMA的概述2.2、HMA的组成2.3、MHA 的特点 三、搭建MySQL HMA1、实验思路1、进入主服务器进行修改配置文件2、启动服务&#xff0c;并在从服务器上配置计划性任务进行时间同步 2、修改 Master…

人声克隆技术:So-Vits-Svc项目解析

SO-VITs-SVC 本文是该系列的第一篇&#xff0c;采用倒序的方式&#xff0c;先从推理过程开始介绍人声克隆的工作流&#xff0c;以及各个模型的功能&#xff0c;之后再去详细介绍各个模型&#xff0c;因此不涉及具体的使用方法&#xff0c;这个官方文档里面已经讲的很清楚了&…

相机成像原理【第一节】

文章目录 1、胶片摄影与数码摄影2、相机的组成2.1 只有传感器相机的成像 3、小孔成像3.1 小孔相机的参数和成像结果3.2 关于小孔成像的两个问题 1、胶片摄影与数码摄影 胶片摄影是把光学镜头的光信号投射到胶片上&#xff0c; 数码摄影是把光学镜头的光信号投射到传感器上&…

「又是干货」史诗级漏洞挖掘的过程快get一下

前言 本文记录了针对前台RCE的挖掘过程&#xff0c;由于该CMS前几天才做了修复&#xff0c;所以将挖掘过程写出来 接着直接来看代码&#xff0c;首先目标仍然是解析if标签的代码块&#xff0c;看一下三个正则 /\{pboot:if\(([^}^\$])\)\}([\s\S]*?)\{\/pboot:if\}//([\w])(…

零基础也能轻松制作电子邀请函教程

随着互联网技术的发展&#xff0c;电子邀请函已经逐渐取代传统的纸质邀请函成为一种趋势。不仅可以节省纸张和邮寄的成本&#xff0c;还能够更加个性化和创意化地展现活动。自己制作电子邀请函&#xff0c;百利而无一害&#xff0c;如果你也想自己动手制作一份电子邀请函&#…

VTK 悬浮显示 actor详细

需求&#xff1a;场景中一个actor&#xff0c;鼠标悬浮时 显示此actor的信息。 效果&#xff1a; 实现&#xff1a; 1&#xff0c;利用vtkInteractorStyleTrackballCamera 的OnMouseMove 事件 判断是否处于悬浮状态 2&#xff0c;判断悬浮后&#xff0c;首先将世界坐标转为…

10分钟教你学会使用ab 进行并发压力测试

目录 ab全称为&#xff1a;apache bench。 安装ab命令&#xff1a; 使用&#xff1a; 测试结果&#xff1a; 结果分析&#xff1a; 总结&#xff1a; ab全称为&#xff1a;apache bench。 是apache自带的压力测试工具。ab非常实用&#xff0c;它不仅可以对apache服务器进…

离子风枪的功能特点及应用领域

除静电离子风枪是一种常见的设备&#xff0c;被广泛应用于各个领域的生产线上&#xff0c;其作用是通过产生离子气流&#xff0c;有效地去除物体表面的静电。在现代工业生产中&#xff0c;静电可能引发诸多问题&#xff0c;如引起电子元器件损坏、拖尘吸附、产品互粘等。除静电…