ABC353F 分讨

news/2024/10/2 14:24:29

回来补补题。

分析:

我先考虑 \(k\) 很大的时候,大块和大块间的移动,我们不得不尽量避免小块:

我们容易发现这样时是最优的,可以发现就是在斜着走,也就是典型的切比雪夫距离。斜着走一次需要经过两条边,所以花费是两倍的切比雪夫距离

要是起点和终点不在大块上呢?

首先考虑它们不在同一大块(这里的大块意义不同于前面说的大块,具体见下)内:

显然,路径上必然是从起点到一个相邻的大块,然后进行大块和大块间的移动到达与终点相邻的大块,然后再直直进入。

路径简化为:起点起点相邻的大块 再到 终点相邻的大块 最后到 终点

我们明确起点和终点,但起点相邻的大块终点相邻的大块并不确定,但相邻的大块只有 \(4\) 个,所以枚举一下 \(4\times 4\) 就行了,如果起点或终点本来就在大块上就不用考虑了。

要是它们是在同一大块的小块呢?

如图:

那么它们间的路径可能就不会经过大块了,可以在小块内之间相互抵达,但也可能经过大块,所以还是要进行上面的那种讨论。

\(k\) 较小时呢?

\(k=1\),显然就不用考虑那么多了,直接就是曼哈顿距离了。

\(k=2\) 呢?

大块间移动的最短距离不再是切比雪夫距离了,特判一下就行了。

\(k=3\) 时就等同于前面 \(k\) 很大的情况啦。

然后我们就可以轻松切了这题啦。

code:

#include<bits/stdc++.h>
#define int long long 
using namespace std;
int k;
int solve(int x1,int y1,int x2,int y2)
{if(k==2) return 2*max(abs(x1-x2),abs(y1-y2))-abs(abs(x1-x2)-abs(y1-y2))/2; return 2*max(abs(x1-x2),abs(y1-y2));
}
vector<pair<pair<int,int>,int>>v[2];
void check(int x,int y,int op)
{if((x/k+y/k)%2) v[op].push_back({{x/k,y/k},0});elsev[op].push_back({{x/k-1,y/k},(x%k)+1}),v[op].push_back({{x/k,y/k-1},(y%k)+1}),v[op].push_back({{x/k+1,y/k},k-(x%k)}),v[op].push_back({{x/k,y/k+1},k-(y%k)});
}
signed main()
{int x1,y1,x2,y2,ans=1e18;cin>>k;cin>>x1>>y1>>x2>>y2;if(k==1) {cout<<abs(y1-y2)+abs(x1-x2);return 0;}if(x1/k==x2/k&&y1/k==y2/k) ans=abs(y1-y2)+abs(x1-x2);check(x1,y1,0);check(x2,y2,1);for(auto i:v[0]) for(auto j:v[1]) ans=min(ans,solve(i.first.first,i.first.second,j.first.first,j.first.second)+i.second+j.second);cout<<ans;return 0;
}

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

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

相关文章

数据可视化是如何在智慧水利中应用的?

数据可视化是如何在智慧水利中应用的?在现代水利管理中,面对复杂的水资源数据和动态变化的水文情况,数据可视化技术通过将繁杂的数据转化为直观、易理解的图表和图形,极大地提升了水利管理的效率和决策的科学性。智慧水利利用数据可视化技术,实现了对水资源的全面监控、精…

CloudEvents-云原生事件规范

简介 CloudEvents 是一种定义事件数据在云端应用之间如何交付的规范,这是由 Cloud Native Computing Foundation(CNCF)的 Serverless 工作小组开发的。通过提供统一的事件格式,CloudEvents 旨在简化跨服务、平台和供应商的事件交付。 CloudEvents位于CNCF全景图的”流和消息…

MyBatisX插件生成代码

MyBatisX插件 MyBatis Plus提供了一个IDEA插件——MybatisX,使用它可根据数据库快速生成Entity、Mapper、Mapper.xml、Service、ServiceImpl等代码,使用户更专注于业务。 下面演示具体用法安装插件在IDEA插件市场搜索MyBatisX,进行在线安装配置数据库连接在IDEA中配置数据库连…

【专题】2022年建筑近零碳升级白皮书报告PDF合集分享(附原数据表)

原文链接:https://tecdat.cn/?p=34225 原文出处:拓端数据部落公众号 近零碳建筑的减碳路径涵盖了近零能耗建筑的技术理念,包括被动式节能和主动式节能,以及建筑整体的智能化和人性化改造。此外,加大新能源系统的建设力度和采用购买国家核证自愿减排量等碳交易方式,也是为…

云终端连接工作站,实现用户和资产分离方案

为了实现工作站主机和用户的分离,并确保资产的安全管理,本方案采用远程桌面和终端登录的方式,使用户通过远程访问桌面来完成日常工作。 方案在工作站上部署 DDP Server,通过JC36云终端的DDP协议连接。可以实现4K 60帧的效果,满足设计和游戏的需求。 此方案不仅可以集中管理…

Flink - [07] 容错机制

一致性检查点(Checkpoints)、从检查点恢复状态、检查点的实现算法、Flink检查点算法、保存点(Savepoints)题记部分 一、一致性检查点Flink故障恢复机制的核心,就是应用状态的一致性检查点。有状态流应用的一致性检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(…

debezium+kafka实现sqlserver数据同步(debezium-connector-sqlserver)

SELECT CASE WHEN dss.[status]=4 THEN 1 ELSE 0 END AS isRunning FROM [#db].sys.dm_server_services dss WHERE dss.[servicename] LIKE NSQL Server Agent (%1.情景展示 在企业当中,往往会存在不同数据库之间的表的数据需要保持一致的情况(数据同步)。 如何将A库a表的数…

Java JSON组成和解析

本框架JSON元素组成和分析,JsonElement分三大类型JsonArray,JsonObject,JsonString。JsonArray:数组和Collection子类,指定数组的话,使用ArrayList来add元素,遍历ArrayList再使用Array.newInstance生成数组并添加元素即可.JsonObject:带有泛型的封装类,给带有泛型的字段…