[贪心+搜索] 马走日升级版

news2024/11/25 0:35:09

题目描述

国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动。如右图所示,从标号为 0 0 0 的点出发,可以经过一步马步移动达到标号为 1 1 1 的点,经过两步马步移动达到标号为 2 2 2 的点。

任给平面上的两点 p p p s s s,它们的坐标分别为 ( x p , y p ) (x_p, y_p) (xp,yp) ( x q , y q ) (x_q, y_q) (xq,yq),其中 x p , y p , x q , y q x_p, y_p, x_q, y_q xp,yp,xq,yq 均为整数。从 ( x p , y p ) (x_p, y_p) (xp,yp) 出发经过一步马步移动可以达到 ( x p + 1 , y p + 2 ) , ( x p + 2 , y p + 1 ) , ( x p + 1 , y p − 2 ) , ( x p + 2 , y p − 1 ) , ( x p − 1 , y p + 2 ) , ( x p − 2 , y p + 1 ) , ( x p − 1 , y p − 2 ) , ( x p − 2 , y p − 1 ) (x_p + 1, y_p + 2), (x_p + 2, y_p + 1), (x_p + 1, y_p - 2), (x_p + 2, y_p - 1), (x_p - 1, y_p + 2), (x_p - 2, y_p + 1), (x_p - 1, y_p - 2), (x_p - 2, y_p - 1) (xp+1,yp+2),(xp+2,yp+1),(xp+1,yp2),(xp+2,yp1),(xp1,yp+2),(xp2,yp+1),(xp1,yp2),(xp2,yp1)。假设棋盘充分大,并且坐标可以为负数。现在请你求出从点 p p p 到点 s s s 至少需要经过多少次马步移动。

输入格式

一行包括 4 4 4 个整数 x p , y p , s p , s q x_p, y_p, s_p, s_q xp,yp,sp,sq

输出格式

含一个整数,表示从点 p p p 到点 s s s 至少需要经过的马步移动次数。

样例

样例输入1:

1 2 7 9

样例输出1:

5

数据范围

对于 40 % 40\% 40% 的数据: x p , y p , x s , y s x_p,y_p,x_s,y_s xp,yp,xs,ys 的绝对值都小于 100 100 100
对于 60 % 60\% 60% 的数据: x p , y p , x s , y s x_p,y_p,x_s,y_s xp,yp,xs,ys 的绝对值都小于 1 0 6 10^6 106
对于 100 % 100\% 100% 的数据: x p , y p , x s , y s x_p,y_p,x_s,y_s xp,yp,xs,ys 的绝对值都小于 1 0 7 10^7 107

题解

对于 40 % 40\% 40% 的数据,可以直接搜索(即普通的马走日)。

#include<bits/stdc++.h>
using namespace std;
int x, y, n, m;
int p, q;
struct node{
	int u, v, step;//x, y, 步数
};
queue<node> qr;
int dx[8] = {1, -1, 2, -2, 1, -1, 2, -2};
int dy[8] = {2, -2, 1, -1, -2, 2, -1, 1};
map<pair<int, int>, int> fl;
int ans = 0;
int main(){
//	p 是 x 的差,q 是 y 的差
	p = abs(n - x);
	q = abs(m - y);
	qr.push(node{0, 0, 0});
	while(!qr.empty()){
		node t = qr.front();
//		printf("%d %d %d\n", t.u, t.v, t.step);
		if(t.u == p && t.v == q){//搜到了
			printf("%d", t.step + ans); 
			return 0;
		}
		fl[make_pair(t.u, t.v)] = 1;
		qr.pop();
		for(int i = 0; i < 8; ++ i){
			int tx = t.u + dx[i];
			int ty = t.v + dy[i];
			if (tx, ty) 没有走过且再范围内
				qr.push({tx, ty, t.step + 1});
		}
	}

对于 100 % 100\% 100% 的数据,考虑将搜索的范围减小。

x x x ∣ x p − s p ∣ |x_p - s_p| xpsp y y y ∣ y p − s p ∣ |y_p - s_p| ypsp。始终让 x ≥ y x \ge y xy
对于 x x x y y y 大于限定值(不要小于 8 8 8)的情况, x x x 先减少 4 4 4(即向该方向移动 2 2 2 步, y y y 可以不变,由于有限定值的限制,所以不用判断)。如果 y y y 走到需要跳的时候(先不动 y y y,需要时再动,移动 2 2 2 步, y y y 可以减少 2 2 2), y y y 减少 2 2 2

接下来搜索就很简单了,建议使用广搜。

代码:

int x, y, n, m;
int p, q;
int ans = 0;
int main(){
	scanf("%d %d %d %d", &x, &y, &n, &m);
	p = abs(n - x);
	q = abs(m - y);
	while(p + q >= 20){
		if(p < q){//保持 p >= q
			swap(p, q);
		}
		p -= 4;
		if(p - 4 <= q * 2){
			q -= 2;
		}
		ans += 2;
	}
	bfs();//见上文,范围根据限定值来定,至少限定值加 4
	输出 ans + bfs 的值
} 

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

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

相关文章

Excel中的常识

工作簿Workbook和工作表Worksheet什么关系&#xff1f; 工作簿&#xff1a;Workbook&#xff0c;也就是一个excel文件 工作表&#xff1a;Worksheet&#xff0c;也就是一个工作表&#xff0c;及Sheet文件 一个工作簿可以包含多个工作表。

IDM(Internet Download Manager)下载器的安装激活与换机方法

很多人都知道 Internet Download Manager(以下简称 IDM)是一款非常优秀的下载提速软件。它功能强大&#xff0c;几乎能下载网页中的所有数据&#xff08;包括视频、音频、图片等&#xff09;&#xff0c;且适用于现在市面上几乎所有的浏览器&#xff0c;非常受大家欢迎。IDM 是…

vue-插槽作用域实用场景

vue-插槽作用域实用场景 1.插槽1.1 自定义列表渲染1.2 数据表格组件1.3 树形组件1.4 表单验证组件1.5 无限滚动组件 1.插槽 插槽感觉知道有这个东西&#xff0c;但是挺少用过的&#xff0c;每次看到基本都会再去看一遍用法和概念。但是在项目里&#xff0c;自己还是没有用到过…

QD1-P1 开始学习前端,HTML、CSS与JS三者之间的关系

今天开始学习前端基础&#xff0c;新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程&#xff1a;【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up&#xff1a;遥遥温柔乡 在B站随便搜索了一个前端课程&#xff0c;共91节&am…

JVS低代码轻应用是什么?是如何拼装的?这篇文章讲的非常详细

1.1JVS轻应用是什么&#xff1f; 轻应用与传统应用的开发过程区别 传统开发&#xff08;原生开发&#xff09;采用的方式&#xff1a;①需求了解 ②产品原型③UI设计④建库建表⑤前端还原⑥后端开发⑦前后端联调⑧功能测试⑨部署上线轻应用开发方式&#xff08;配置化拼装&…

SpringBoot定时任务@Scheduled完整功能详解(提供Gitee源码)

目录 一、实现定时任务 1.1、fixedRate 1.2、fixedDelay 1.3、initialDelay 1.4、cron 二、cron表达式 三、读取配置文件 四、实现并行执行定时任务 五、Gitee源码 一、实现定时任务 首先在主应用类或者任何配置类上添加@EnableScheduling注解,以启用定时任务功能。…

基于monaco-editor的web日志组件

基于monaco-editor封装的编辑器&#xff0c;支持如下功能&#xff1a; 日志内容颜色配置&#xff1a;info、primary、success、warning、error支持主题配置&#xff1a;dark、light支持滚动到顶部、底部、全屏编辑器默认带的全局搜索扩展性强&#xff0c;支持monaco的所有配置…

STM32学习--4-1 OLED显示屏

接线图 OLED.c #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))/*引脚初始化*/ void …

selenium:WebElement类的核心操作方法(3)

当我们通过webdriver中的find_element函数定位到元素后&#xff0c;其实返回的是WebElement对象&#xff0c;而该对象有很多重要的方法&#xff0c;比如输入文本&#xff0c;点击按钮&#xff0c;获取属性&#xff0c;截屏等 WebElement类的方法介绍 文本输入与清除 send_key…

【原创教程】电气电工23:电气柜的品牌及常用型号

电气电工要清楚常用的电气柜品牌及型号,对于电器柜的选择,现在我们一般常用的品牌有3个。分别是好夫满、上海上海桐赛电气和南京巴哈曼电气,还有一种就是网上订制。 一、好夫满系列电气箱 好夫满有很多种类的机箱,EB精巧控制箱系列、KL接线箱系列、BKL不锈钢接线箱系列、…

构建基于 阻塞队列 / 环形队列 的高效生产消费者模型系统

1. 生产者-消费者问题 概述 生产-消费者模型 &#xff1a;一个或多个 生产者线程 产生数据并将其放入共享缓冲区&#xff0c;同时一个或多个 消费者线程 从该缓冲区中读取数据进行操作的情景。 缓冲区 是一个用于存储生产者产生数据的中间容器&#xff1b;缓冲区 的容量通常是…

【操作系统】四、文件管理:1.文件系统基础(文件属性、文件逻辑结构、文件物理结构、文件存储管理、文件目录、基本操作、文件共享、文件保护)

文件管理 文章目录 文件管理八、文件系统基础1.文件的属性2.文件的逻辑结构2.1顺序文件2.2索引文件2.3索引顺序文件2.4多级索引顺序文件 3.目录文件❗3.1文件控制块FCB3.1.1对目录进行的操作 3.2目录结构3.2.1单级目录结构3.2.2两级目录结构3.2.3多级目录结构&#xff08;树形目…

vue2引入i18n插件实现中英文切换

vue2引入i18n插件实现中英文切换 1.安装i18n插件2.引入3.使用4.数据渲染 1.安装i18n插件 npm install vue-i18n --save-dev注意&#xff1a; vue2环境下安装i18n插件时 有可能会报错&#xff08;我的这个项目比较老&#xff0c;vue2.5.x版本的&#xff09;&#xff0c;报错信息…

保姆级教程 | Linux中grep命令使用 分子动力学轨迹文件输出特定原子电荷值

背景 由于课题需要&#xff0c;现根据lammps运行得到的轨迹需要提取出目标原子的电荷值 步骤 思路 首先确定目标原子在轨迹中的序号&#xff08;lammps每个原子都有自己独立的【分子号原子号】&#xff09; 其次要十分清楚体系中的分子号排序方式&#xff0c;然后只要筛选出…

安卓13禁止锁屏 关闭锁屏 android13禁止锁屏 关闭锁屏

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 设置 =》安全 =》屏幕锁定 =》 无。 我们通过修改系统屏幕锁定配置,来达到设置屏幕不锁屏的配置。像网上好多文章都只写了在哪里改,改什么东西,但是实际上并未写明为什么要改那…

浅谈虚拟电厂在分布式光伏发电应用示范区中的应用及前景

0引言 随着电力体制改革的持续推进&#xff0c;电力市场将逐步建立和完善&#xff0c;未来的售电主体也将随着配售电业务的逐步放开而日益多元化&#xff0c;新的政策不断鼓励分布式电源和微电网作为独立的配售电市场主体推动运营模式的创新。与微电网所采取的就地应用为控制目…

离散数学-逻辑与证明基础1.4(谓词和量词)

谓词 1.4.2 谓词 涉及变量的语句&#xff0c;例如&#xff1a; “ x > 3 x > 3 x>3”&#xff0c;“ x y 3 x y 3 xy3”&#xff0c;“ x y z x y z xyz” 以及 \quad “Computer x x x is under attack by an intruder” \quad “Computer x x x is f…

nginx虚拟主机配置与locaion规则

目录 1.虚拟主机 1.1分类 1.2基于域名的虚拟机 1.2.1测试 1.3基于端口的虚拟主机 1.3.1测试 ​编辑1.4基于IP的虚拟主机 2.nginx日志 3.location 1.虚拟主机 虚拟主机:相当于1个网站&#xff0c;在nginx中通过server{}区域实现。 nginx虚拟主机有不同的配置类型…

科研论文必备:10大平台和工具助你高效查找AI文献

申博、留学、评职称的同学&#xff0c;逃不过要发表论文。对很多人尤其是对于论文新手来说&#xff0c;写论文可能是一个极具挑战性的过程。今天Bulu分享以下10个论文平台、论文检索工具&#xff0c;会大大提高论文撰写效率&#xff0c;告别熬夜肝论文&#xff01;建议收藏哦&a…

【原创】java+springboot+mysql劳动教育网系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…