题解:AT_abc353_f [ABC353F] Tile Distance

news/2025/3/1 3:58:30/文章来源:https://www.cnblogs.com/louisliang/p/18668254

[ABC353F] Tile Distance 题解

cnblogs

题目传送门:洛谷,Atcoder

Solution

很恶心人的分类讨论题。

很显然走大格子大概率比走小格子快。

对终点和起点向上下左右枚举大格子,我们就把问题转化为给两个大格子 \((a,b)\)\((c,d)\),求怎样走最快。

对角的大格子可以通过 \(2\) 步相互到达,如下图所示。

于是我们可以以以下路径,这是一般情况的最短路径,步数为 \(\max(|a-c|,|b-d|)\)。(据说这是切比雪夫距离)

然而当 \(k \leq 2\),最后一段路不需要上下横跳,直接横穿小格子即可,步数为 \(\frac{k+1}{2}\min(|a-c|,|b-d|)+||a-c|-|b-d||\)

最后要讨论只通过小格子达到的情况,就让上面算出的答案和曼哈顿距离去最小值就好了。

注意:若起点和终点在同一个小格子的块中,答案不一定是他们的曼哈顿距离,就像下图所示的情况,显然红线比绿线短。

code

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
#include<cstring>
#include<cmath>
#include<cassert>
#define pr pair < long long, pair<long long, long long> >
#define mp make_pair
using namespace std;
long long k, sx, sy, tx, ty;
long long gt(long long ax, long long ay, long long bx, long long by){long long a = abs(ax - bx), b = abs(ay - by), ans = max(a, b) * 2, sp = max(a, b) - min(a, b);if(k == 1)return a + b;if(k == 2)return a + b + sp / 2;return ans;
}
vector < pr > a, b;
int main(){cin >> k >> sx >> sy >> tx >> ty;long long dsx = sx / k, dsy = sy / k, dtx = tx / k, dty = ty / k;long long dis = max(sx, tx) - min(sx, tx) + max(sy, ty) - min(sy, ty);if((dsx + dsy) % 2 == 0){a.push_back(mp(sx - dsx * k + 1, mp(dsx - 1, dsy)));a.push_back(mp(sy - dsy * k + 1, mp(dsx, dsy - 1)));a.push_back(mp((dsx + 1) * k - sx, mp(dsx + 1, dsy)));a.push_back(mp((dsy + 1) * k - sy, mp(dsx, dsy + 1)));}elsea.push_back(mp(0, mp(dsx, dsy)));if((dtx + dty) % 2 == 0){b.push_back(mp(tx - dtx * k + 1, mp(dtx - 1, dty)));b.push_back(mp(ty - dty * k + 1, mp(dtx, dty - 1)));b.push_back(mp((dtx + 1) * k - tx, mp(dtx + 1, dty)));b.push_back(mp((dty + 1) * k - ty, mp(dtx, dty + 1)));}elseb.push_back(mp(0, mp(dtx, dty)));long long minn = dis;for(auto i : a)for(auto j : b)minn = min(minn, i.first + j.first + gt(i.second.first, i.second.second, j.second.first, j.second.second));cout << minn << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型中的项目管理优化:协作工具的优势与应用

一、企业数字化转型的背景与挑战 1.1 数字化转型的驱动力数字化转型是指企业通过采用数字技术、创新流程和业务模式,提升运营效率、创造新价值并优化客户体验。随着云计算、大数据、人工智能和物联网等技术的不断发展,数字化转型已成为企业实现长期竞争力和持续增长的重要战略…

rk3568屏幕抖动问题

问题描述:有时候操作屏幕界面,发现屏幕有抖动的情况。经跟RK原厂沟通,此问题跟给ddr供电的vdd_logic有关系。vdd_logic默认定义:vdd_logic: DCDC_REG1 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = <500000>;regulator-max-microvolt = <13…

B@se-还原错误字母表转码的base64编码

题目: 密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD== JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/oh holy shit, something is missing... 第一行是密文,有明显的Base64编码特征(等号结尾) 第二行是大小写字母、数字、+、/,有明显的…

打开浏览器Chrome跳转指定页面并全屏打开

办法来源于https://blog.csdn.net/shaofengzong/article/details/119928096 主要用于大屏数据可视化的项目,设置电脑自启动后,打开浏览器的同时默认跳转指定页面并全屏打开。、 办法通过增加谷歌浏览器的启动参数进行实现。 两种方式实现,需要根据需求进行选择默认全屏打开指…

板栗看板:让供应商全生命周期管理变得如此简单

供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结构化、全流程的供应商闭环管理过程,旨在优化供应商关系,提高供应链的整体效率和可持续性。以下是对供应商全生命周期管理的详细阐述供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结…

协作管理工具在多部门协作中的优势与应用

一、跨职能团队协作的挑战 跨职能团队的协作面临多个方面的挑战,这些挑战往往会影响团队的工作效率、项目的推进速度以及最终的项目质量。 1.1 信息传递不畅在跨职能团队中,成员来自不同的部门,各自拥有不同的背景、职责和目标。因此,团队成员之间的沟通可能不够顺畅,信息…

side channel

‌Side Channel‌,中文称为“边信道”,是指通过加密软件或硬件运行时产生的各种泄漏信息来获取密文信息的攻击方式。在狭义上,边信道攻击特指针对密码算法的非侵入式攻击,通过分析加密电子设备在运行过程中的边信道信息泄露来破解密码算法。常见的边信道攻击包括计时攻击、…

RocketMQ工具的使用方法

RocketMQ简介 启动rocketmq-Dashboard项目 输入 http://localhost:8888/#/ 即可到rocketmq界面 整体横向菜单分为八个部分:OPS(运维):主要是设置nameserver和配置vipchannel Dashboard(驾驶舱):控制台的dashboard,可以分别按broker和主题来查看消息的数量和趋势。 Cluster(…

【docker】docker desktop换国内源时 apply按钮为灰色or换源失败 解决方法

配docker环境时复制进去国内镜像源后,发现apply按钮为灰色,点不了,如下图解决方法:往下滑,找到下图圈住的选项打勾再回到Docker Engine界面,发现可以点apply按钮了在文本框中添加"registry-mirrors": ["http://mirrors.ustc.edu.cn","http://mi…

ElasticSearch在Windows环境搭建测试

引子 也持续关注大数据相关内容一段时间,大数据内容很多。想了下还是从目前项目需求侧出发,进行相关学习。Elasticsearch(ES)是位于 Elastic Stack(ELK stack) 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch…

科研绘图系列:python语言绘制SCI图合集

介绍 科研绘图系列:python语言绘制SCI图合集 加载python import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.patches as mpatches import seaborn as snsfrom statsmodels.stats.multitest import multipletests# Setup for local r…

Postman相关

postman打开控制台的快捷键alt+ctrl+c1、工具栏 New: 新建,可以新建Request请求,Collection请求集,环境等等 Import: 导入,可以导入别人导出的请求集 Runner: 运行一个请求集(批量执行) Invite: 邀请(需要注册,邀请进行协作) 同步图标: (需要注册,同步你的项目到云…