题解:NFLSOI#P10008. Speike和Tom

news/2025/11/21 15:49:39/文章来源:https://www.cnblogs.com/Noivelist/p/19253328

众所周知,Speike 狗是一条特别喜欢追着 Tom 打的狗。

现在,Tom 又把 Speike 惹生气了,现在 Speike 需要跨越千山万水找 Tom 报仇。

Speike 所在的世界可以看成是一个无穷大的平面,平面由一个平面直角坐标系确定。在平面上有许多不相交的矩形障碍,矩形的四边平行于坐标轴。

Speike 需要从 \((0,0)\) 出发,按恒定的速率在尽量短的时间内跑到 \((0,X_t)\) ,也就是 Tom 在的位置。出题人规定,Speike 只能沿着平行于坐标轴的方向运动,且不能进入矩形障碍的内部,但是可以在障碍边界上移动。

所有障碍的横坐标都在 \([0,X_t]\) 之内。保证矩形不相交(即没有公共面积,或者说公共面积为 0,但是可能共享一条边或者一个顶点),也不会退化成线段或者点。

Speike 的智商不是很高,因此他需要你帮忙设计一条最短的路线。当然,你只需要告诉他路线的长度就行了。

输入描述

  • 第一行一个整数 \(n\),代表障碍的个数。
  • 第二行一个整数 \(X_t\),代表终点的横坐标。
  • 第三行开始,共 \(n\) 行,每行 4 个整数 \(a,b,c,d\) ,代表每个矩形的某两个相对的顶点的坐标为 \((a,b)\)\((c,d)\)

输出描述

  • 共一行,一个整数,代表最短路线的长度。

\(\mathcal {SOLUTION}\)

我们可能会很开心地想到一个很假的做法来通过前面两个样例,也就是排除掉没有经过x轴的那些矩形,然后去找y坐标大于和小于零的情况下的两个最大值,然后去两个里面的小的那个,乘二加上 \(X_t\)

一眼假,错误性读者自证。

我们考虑正解,SXHdalao orz写了一个线段树维护DP,一个小时后他告诉我他假了。

但是不是不能使用我们的错解的想法:我们已经到过一个更高的点,那么我们肯定不需要再下沉去撞上一些不该撞的东西了。但是我们一开始在 \((0,0)\) 所以我们肯定是要往上( \(|y|\) 大的地方)走的,所以我们到一个“下一个块”的时候,我们往回看,找到那些高度比现在这个小的那些块,DP 它(言简意赅)。我们取那些块中能用最小代价到这个块的值,作为当前块的 DP 值。

这里有个关键性质,speike 需要一直往右走,不可能往左走,不然肯定不优,而且往右的总路程必定为 \(x_t\),那么能决定我们答案大小的值只会是在 \(y\) 轴上移动的距离。

我们思路已经基本清晰,那么先预处理所有的块,我们拿它的左右上下轮廓来表示这个矩形 \(\{xl,xr,yl,yr\},xl<xr,yl<lr\)。我们按照 \(xl\) 的大小升序排列,然后 \(1\)~\(\operatorname {n}\) 遍历。在一个 set 里面我们不需要存一整个块,不然数据比较复杂不好维护,我们要存一条单独的横向的(与 x 轴平行的)边的 y 值与从 \((0,0)\) 到它的最小距离。

遍历的过程中我们到第 \(i\) 个块的时候,从当前的 set 里面取出 lower_bound({a[i].yl,0}) 设为边 \(j\) (为什么是 \(a[i].yl\)? 其实是哪个都无所谓,我们选取一条作为主旋律而已), 然后得出它到块 \(i\) 的上边与下边的 \(y\) 轴相应数值,直接把这个边 \(j\) 去覆盖掉( erase 大法好!):

\[\mathcal{\Delta h_{below}=|a[i].y_{below}-y_j|}\\ \mathcal{\Delta h_{above}=|a[i].y_{above}-y_j|}\\ \mathcal{dp_{i_{below}}=\min \{\ \Delta h_{below}+dp[j]\ \} }\\ \mathcal{dp_{i_{above}}=\min \{\ \Delta h_{above}+dp[j]\ \} }\\ \]

我们最后简单地发现答案是:

\[\forall i\in [1,n]\\ ans=\min \{ dp[i]_{below\ or \ above} +|a[i].y_{below\ or\ above}| \} + X_t\\ \]

这个查找边的话只需要 set 暴力跳就好了,时间不管怎么样都可以卡过去,毕竟我们的 erase 操作保证了不会爆炸到 \(\mathcal {O(n^2)}\)

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=5e5+10;
const int INF=1e16;
int n,ed;
set<pair<int,int>>s;
struct node{int xl,xr,yl,yr;
}a[N];bool cmp(node a,node b){return a.xl<b.xl;
}signed main(){freopen("speike.in","r",stdin);freopen("speike.out","w",stdout);ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>ed;for(int i=1,xl,xr,yl,yr;i<=n;i++){cin>>xl>>yl>>xr>>yr;if(xl>xr)swap(xl,xr);if(yl>yr)swap(yl,yr);a[i]=node{xl,xr,yl,yr};}sort(a+1,a+1+n,cmp);s.insert({0,0});//set暴力维护 for(int i=1;i<=n;i++){auto it=s.lower_bound({a[i].yl,0});//在前面可以被选取(直接飞过来)的 int VL=INF,VR=INF;#define dp it->second#define h it->firstwhile(it!=s.end() and h<=a[i].yr){//到下边的最小值 VL=min(VL,dp+llabs(h-a[i].yl)/*delta height for below*/);//到上边的最小值 VR=min(VR,dp+llabs(h-a[i].yr)/*delta height for above*/);s.erase(it);it=s.lower_bound({a[i].yl,0});}s.insert({a[i].yl,VL});s.insert({a[i].yr,VR});}
//	cout<<"debug"<<endl;int ans=INF;for(pair<int,int>t:s){int x=t.first;int y=t.second;ans=min(ans,llabs(x)+y);}cout<<ed+ans;
}

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

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

相关文章

洛谷 B4410:[GESP202509 一级] 金字塔 ← 循环结构

​【题目来源】https://www.luogu.com.cn/problem/B4410【题目描述】金字塔由 n 层石块垒成。从塔底向上,每层依次需要 nn, (n−1)(n−1), ⋯, 22, 11 块石块。请问搭建金字塔总共需要多少块石块?【输入格式】一行,…

CF246E bfs 序上莫队

来篇莫队,支持正义根号。 发现是数颜色,这不是我们莫队的经典题目吗,所以考虑莫队。 发现 \(k\) 级儿子挺好,这给出了两个性质,分别在 bfs 序和 dfs 序上。bfs 序上,同一子树内深度相同的点相邻。 dfs 序上,可以…

2025 年 11 月降本增效管理咨询公司推荐排行榜,降本增效咨询,企业降本增效,提质增效咨询机构,专业实力与客户满意度深度解析

2025年11月降本增效管理咨询公司推荐排行榜,降本增效咨询,企业降本增效,提质增效咨询机构,专业实力与客户满意度深度解析 在当前经济环境下,企业面临着日益严峻的成本压力和效率挑战。降本增效管理咨询服务作为提…

小型食品厂省心了!CLC-S22R 控温又省成本​

开小型面包房、酱菜厂、豆制品厂的老板们,是不是总被 “温度”“湿度” 愁得睡不着?烘焙面包要精准控温,差 2 度就烤焦;腌酱菜要稳定湿度,潮了容易坏;这些参数靠人工盯,不仅累,还总出错,一批货废了就是几千块…

质量基石:读懂检查表,用好数字化管理利器

在企业运营与质量管理中,我们总在寻找一种简单而有效的方法,能将复杂的问题条理化,将模糊的感觉数据化。检查表,正是这样一款基石性的工具。 一、什么是检查表? 核心定义:检查表,又称调查表、核对表,是一种为了…

P4148 简单题 模板题分析

供自己复习使用,因此只贴代码。 题目链接:https://www.luogu.com.cn/problem/P4148。 代码 时间复杂度 \(\mathcal{O}(n\sqrt n)\)。 #include <iostream> #include <cstdio> #include <stdlib.h>…

【压测数据分享】VictoriaLogs 中的参数 `inmemoryDataFlushInterval` 对写入性能的影响

【压测数据分享】VictoriaLogs 中的参数 `inmemoryDataFlushInterval` 对写入性能的影响作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客 zhihu Github 公众号:一本正经的瞎扯inmemoryDataFlu…

Windows系统增强神器!PowerToys微软官方效率工具(实操v教程)!

PowerToys 就是微软官方为解决这些痛点而开发的增强工具集!它集成了20+个实用工具,完全免费开源,让你的Windows使用体验更上一层楼。软件下载 PowerToys拓展工具箱 ​​ 软件使用教程 安装完成后,PowerToys会显示其…

Linux内核实验-ubuntu

​✅实验环境 vmware workstation 17 ubuntu24.04下载链接: https://old-releases.ubuntu.com/releases/24.04/ ✅实验目的 为了解决日常环境部署中某些驱动软件依赖特定内核版本,此教程实验,用于内核版本的调整实…

2025年11月四川自习室加盟市场分析与品牌推荐

2025年11月四川自习室加盟市场分析与品牌推荐近年来,共享Ai自习室在四川等多个省份逐渐兴起,成为许多创业者关注的项目。面对不同的自习室加盟/代理品牌,许多初次接触这个行业的朋友会感到困惑:这些自习室加盟/代理…

2025年电极生产厂家权威推荐榜单:航空插头/马达壳/插针源头厂家精选

在工业制造智能化、精密化转型的背景下,电极作为电子元器件、航空航天、汽车制造等领域的关键部件,其技术水平和产品质量直接影响设备性能与可靠性。据行业数据显示,2024年中国电极产业市场规模持续增长,其中高端精…

2025 最新推荐装盒机厂家权威排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机技术创新与整线配套能力测评

引言 在全球包装工业化升级进程中,装盒机作为后道包装核心设备,其性能稳定性、智能化水平与整线适配能力已成为企业提升生产效率、保障产品品质的关键。据国际包装机械协会(IPMA)最新测评数据显示,全球装盒机市场…

P9433 [NAPC-#1] Stage5 - Conveyors 分析

感觉是经典题目。 题目概述 给出一个有 \(n\) 个点并且其中有 \(k\) 个关键点的无根树,要求从 \(s\) 走到 \(t\) 途中必须包含这 \(k\) 个关键点,求最短路径。 分析 考虑以一个关键点作为根。 由于这道题目 \(s,t\) …

我发现上大学虚构痛苦是件非常愚蠢的事

最近在图书馆刷夜时突然想通一个道理:大学比高中焦虑,其实是因为选择太多了。高中时只有高考这一条路,而现在的我们,面前摆着无数条路,却不知道哪条能走通。 看着身边同学拿国奖、竞赛获奖,自己却普普通通;纠结…

Qt 实现“可点击跳转”的 QSlider

在 Qt 开发中,QSlider 是最常用的滑块控件之一,但很多人都会遇到一个让人抓狂的问题:默认的 QSlider 点击滑块以外的区域时,滑块只会往前/往后跳一小步(page step),而不是直接跳转到点击的位置。这在音频播放器…

技术架构进化论:从“独栋别墅”到“智慧城市”

想象一下,你要解决住宿问题。技术架构的演进,就完全复制了这个过程。 一、从单体架构到微服务演进:从“独栋别墅”到“现代化小区”单体架构 (Monolith) —— 最初的“独栋大别墅” 是什么: 把所有功能——用户管理…

STM32项目分享:基于STM32的酒店送餐小车的设计与搭建

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年最新推荐套袋机厂家权威榜单:聚焦技术创新与专利优势,覆盖多品类设备选型指南M 型袋套袋机/预制袋套袋机/袋中袋套袋机/食品套袋机/八边封套袋机公司推荐

引言 在全球包装行业智能化转型的关键阶段,套袋机作为后道包装核心设备,其技术成熟度、自动化水平与适配能力成为企业提升生产效率的核心抓手。当前市场设备质量差异显著,部分厂商存在研发投入不足、稳定性欠佳、定…

Galera Cluster部署 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

模拟机问题

Android 模拟器运行问题总结与解决方案 🎯 项目概述 项目类型: Cordova 混合应用 目标平台: Android 主要工具: Android Studio, Cordova CLI, Gradle 🔥 遇到的主要问题及解决方案 问题 1: 环境变量配置错误 症状…