P1315 [NOIP 2011 提高组] 观光公交

news/2025/11/5 9:30:08/文章来源:https://www.cnblogs.com/qwqSW/p/19191997

题目传送门

我的博客-欢迎来访

个人认为是个好题。另外,推荐一下这篇题解,看着这篇题解学明白的。


首先,我们要求的是最小的 \(\sum\limits_{i=1}^{m}{arr_{to_i}}-tim_{i}\),其中 \(arr_i\) 表示大巴到达景点 \(i\) 的时间,\(to_i\) 表示游客 \(i\) 的目的地,\(tim_i\) 表示游客 \(i\) 的出发时间。

既然 \(tim_i\) 是固定的,所以我们要想办法让 \(\sum\limits_{i=1}^{m}{arr_{to_i}}\) 尽可能小。

如果不考虑乘客和加速器的话,就让公交正常开,那么这会是时间关于景点的函数图像:

P1315_1_1

如果加上乘客的影响的话,那么到了部分景点后车还要等乘客,图像会有部分的抬升,并形成多个断点:

(如果一个景点 \(i\) 被称作断点,那么 \(arr_i \le lst_i\),其中 \(lst_i\) 表示最晚到达该出发点的游客是几点到的)

P1315_2_1

P1315_3_1

以下称两个断点中间的区域为一个区间。

加上加速器的情况有点复杂。如果在某个位置使用了加速器的话,那么从它开始,到它所在区间的末尾,所有的点的到达时间都会-1。而后面的区间,由于制约因素是最晚的游客的到达时间,所以并不对它们起作用。

P1315_4_1

然后我们就会发现,在一个区间里,如果我们决定对它使用一个加速器,那么越早使用的话,受益的游客越多。所以对于一个区间,我们尽可能会往前选择使用加速器的边:

P1315_5_1

当然,也有一种可能,使用完加速器后出现了新的断点:

P1315_6_2

我们使用一个加速器的时候,当然是希望它造福尽可能多的游客,也就是希望 \(\sum\limits_{i=1}^{m}{arr_{to_i}}\) 减小的最多。所以我们使用一个加速器的时候,挨个考虑每个区间,取那个最合适的地方用掉就好。

但是我们如何考虑“造福多少游客”呢?我们记 \(des_i\) 表示以 \(i\) 为目的地的游客有多少。显然,如果在 \(pos\)\(pos+1\) 的边使用加速器,并且当前区间靠右的断点是 \(r\),它就能使答案减 \(\sum\limits_{i=pos+1}^{r-1}{des_i}\)

于是,我们重复这个过程 \(k\) 次,用掉 \(k\) 个加速器后统计答案即可。时间复杂度 \(O(kn)\)

代码:

P1315
#include<bits/stdc++.h>
#define int long long
using namespace std;inline int read(){int x=0,f=1;char c=getchar();while(c<48){if(c=='-') f=-1;c=getchar();}while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}const int N=1e3+3;
const int M=1e4+4;
const int K=1e5+5;
int n,m,k,d[N],lst[N],des[N],to[M],tim[M],arr[N],cut[N],cnt;
//cut[i]:第i个发现的断点是几号
//cnt:cut数组的指针
//其余变量名同题解 signed main(){n=read(),m=read(),k=read();for(int i=1;i<n;i++){d[i]=read();}//输入&预处理tim,lst for(int i=1;i<=m;i++){tim[i]=read();int l=read();to[i]=read();lst[l]=max(lst[l],tim[i]);des[to[i]]++;}int TIM=0;//模拟法处理arr,cut for(int i=1;i<=n;i++){arr[i]=TIM;TIM=max(TIM,lst[i]);if(arr[i]<=lst[i]){cut[++cnt]=i;}TIM+=d[i];}while(k--){int mx=-1,gai=0;for(int i=1;i<=cnt;i++){int pos=cut[i];while(!d[pos]){//注意有些路段是不可以使用加速器的,要接着往后跳 pos++;if(arr[pos]<=lst[pos]||pos>=n){//如果跳到断点还是找不到合适的边时,那该区间就用不了加速器了 pos=-20100325;//这串数字懂得都懂 break;}}if(pos==-20100325){continue;}//这里是在模拟 如果当前这个地方用加速器,能使答案减多少 int loc=pos+1,res=0;while(1){res+=des[loc];if(arr[loc]<=lst[loc]||loc>=n){break;}//警示后人:要判断当前点是否进了下一个边界,越过了就必须跳出,否则可以接着往下找。//例如样例里, 不判的话loc=2直接跳3,进入下一个区间了,不合规的 loc++;}if(res>mx){mx=res,gai=pos;}}d[gai]--;//就决定减这里了 //这里是在进行一个减的过程 while(++gai){arr[gai]--;if(arr[gai]==lst[gai]){//出现了新的断点 cut[++cnt]=gai;}if(arr[gai]<lst[gai]||gai>=n){//否则跳到了原有断点上 break;}}}//统计答案 int ans=0;for(int i=1;i<=m;i++){ans+=arr[to[i]]-tim[i];}printf("%lld",ans);return 0;
}

还有一些实现细节值得注意(或者说,我当时阅读题解的一些问题):

(以下仅为个人理解)

1.为什么断点的判定可以取等?个人认为取等的话出现新断点时,方便判断是旧断点还是新断点,并且如果它的 \(arr\) 减了 1 的话,它的制约因素是 \(lst\),还是无法造福它。

2.为什么我们找使用加速器的点时从断点右侧的边开始试,而不是断点左侧的那条边?因为你找那条边没啥用,就算用了加速器,制约因素是游客到达时间,不会造福后面的点。但是断点右侧的边可以造福后面的点。

3.有关代码里的警示后人:这个纯属我当时写的时候脑抽,我应该先判断当前这个点是不是断点再往后跳,否则如果先往后跳再判断点的话,有可能直接越过一个断点统计答案去了。

4.如果我们决定让 \(d_{pos}--\),那么造福的是 \(pos+1\) 之后的该区间的点。

如果你觉得这篇题解讲的还不错的话,不妨点点赞呀 qwq

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

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

相关文章

2025年11月销量第一认证机构评测:资质认证与实战案例深度剖析

在当今竞争激烈的市场环境中,企业越来越需要借助权威的第三方认证来证明自身的市场地位。销量第一认证作为一种重要的市场背书工具,能够帮助企业提升品牌公信力、增强市场竞争力。对于正在寻找认证机构的企业决策者来…

最近笔记

VSCode json 快捷键 下载Prettify JSON 然后 ctrl+shift +p 然后搜索Prettify JSON 可以直接把文件展开

CH5xx 复位启动时间

CH5xx 复位启动时间本文实测了CH573 CH582 CH592 CH585 CH572系列芯片的复位启动时间(从复位发生到运行main函数) 一.上电复位 上电复位典型值15ms+boot启动文件约40ms+boot执行约40ms+用户程序启动文件约40ms 最长约…

2025年质量好的马靴劳保鞋推荐TOP品牌厂家

2025年质量好的马靴劳保鞋推荐TOP品牌厂家 行业概述 在工业生产、建筑施工、油田作业等高风险环境中,一双高质量的马靴劳保鞋是保障劳动者安全的基础装备。优质的劳保鞋不仅需要具备防砸、防刺穿、防静电等基础功能…

2025年知名的青年鸡热门品牌

2025年知名的青年鸡热门品牌 随着养殖业的快速发展,青年鸡市场逐渐成为行业关注的焦点。优质的青年鸡供应商不仅能提供健康的鸡苗,还能帮助养殖户提高生产效率和经济效益。2025年,市场上涌现出一批优秀的青年鸡品牌…

等离子清洗机设备:安全性高、技术强、外观美观

在精密制造领域,等离子清洗机是提升产品良率与可靠性的隐形基石。企业选择时往往聚焦三大核心需求:设备安全性、技术专业性与外观实用性。以下结合行业评测与用户反馈,推荐2025年五大等离子清洗机品牌,为企业选购提…

红楼梦龄官病死前和贾蔷同居的情节

癸本《红楼梦》中的“松批”关于龄官与贾蔷同居直至病死的这条批语,确实是近年来红学考据中一个非常震撼的发现。它就像一把钥匙,不仅润滑了龄官这个人物的命运齿轮,更将其纳入了《红楼梦》最核心的悲剧叙事之中——…

2025年口碑好的盐城短视频策划精选优质榜

2025年口碑好的盐城短视频策划精选优质榜 在数字化营销浪潮中,短视频已成为企业品牌传播的核心阵地。盐城作为长三角经济圈的重要城市,涌现出一批专注于短视频策划与运营的优质服务商。本榜单基于客户口碑、服务案例…

2025年江西出入口智能设备企业口碑TOP5推荐,江西奇仕盾科技有限公司

在智慧城市建设加速推进的2025年,出入口智能设备与智慧系统解决方案成为政企单位数字化转型的核心刚需。面对市场上鱼龙混杂的供应商,如何选择口碑好、服务优、前景广的合作伙伴?以下结合用户关心的江西奇仕盾科技有…

2025年老人/青少年/成人乳胶枕品牌排行榜,哪个乳胶枕品牌的质量好?

2025年国人睡眠健康意识持续觉醒,老人、青少年、成人等不同年龄段人群对乳胶枕的需求呈现差异化爆发态势——老人关注支撑性与健康安全性,青少年侧重护颈与生长适配性,成人则追求舒适与颈椎减负效果。然而当前乳胶枕…

2025年工业探伤铅房厂家权威推荐榜单:探伤铅房/移动铅房/牙科铅房源头厂家精选

在航空航天、石化装备、压力容器等高端制造领域,工业探伤铅房作为射线防护的核心设施,其防护合规性与结构可靠性直接关系到检测安全与运营效率。随着GBZ/T 180-2006等国家标准的严格执行,以及制造业对智能化、定制化…

2025年有实力涂装喷砂房厂家推荐及选择指南

2025年有实力涂装喷砂房厂家推荐及选择指南 随着工业制造技术的不断升级,涂装喷砂房作为表面处理的核心设备,其性能与质量直接影响生产效率和产品品质。2025年,选择一家技术领先、服务完善的涂装喷砂房厂家至关重要…

跳石头:求最大的最短距离(p2678)

P2678 [NOIP 2015 提高组] 跳石头 题目背景 NOIP2015 Day2T1 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点…

day22-streamlit+agent sdk融合

Streamlit 简介 什么是streamlit Streamlit是一个免费的开源框架,用于快速构建和共享漂亮的数据科学Web应用程序。它是一个基于Python的库,专为机器学习工程师设计。数据分析工程师不是网络开发人员,他们对花几周时…

格式化 U 盘,并还原分区

U 盘因为使用了单片机来格式化,导致接入 linux 开发板的时候,没有 /dev/sda1 分区; 可以按照以下步骤来还原: 1. 以管理员身份运行命令提示符 2. 输入 diskpart 按 enter 3. 输入 list disk 按 enter4. 输入select…

2025 年景观设计公司最新推荐榜:聚焦全流程服务与创新实力,庭院 / 民宿 / 生态园等场景优选品牌清单

引言 当前景观设计行业需求持续升级,从私家庭院到商业文旅项目,客户对生态性、艺术性与落地性的要求不断攀升,但行业仍存在设计同质化、服务断层、方案落地率低等问题。为提供权威参考,行业协会联合专业测评机构开…

2025年比较好的高端展厅设计江苏地区设计服务榜

2025年江苏地区高端展厅设计服务排行榜 在当今商业环境中,展厅设计不仅是企业形象的展示窗口,更是品牌价值的战略延伸。江苏作为中国经济最活跃的省份之一,汇聚了大量优秀的设计服务企业,为各行业提供专业的高端展…

2025年11月上海老房翻新公司推荐榜单及对比分析

在上海这座充满历史底蕴的城市,老房翻新已成为许多家庭改善居住环境的重要选择。随着2025年上海城市更新政策的持续推进,老房翻新市场需求持续增长。根据上海市住建委最新数据,2025年上半年老房翻新业务量同比增长约…

day21 agent SDK框架

OpenAI开源Agents SDK智能体开发实战 Agents SDK简介 2025年3月11号,OpenAI正式推出其下第一款企业级Multi-Agent开发框架Agents-SDK,该框架是此前OpenAI在去年推出的Swarm的升级版,在保留了Swarm的高效便捷的Multi…

2025年口碑好的注册公司区域口碑榜

2025年口碑好的注册公司区域口碑榜 在如今纷繁复杂的商业环境中,企业的创立与发展往往面临着诸多工商财税、知识产权等方面的难题。从公司注册时的繁琐流程,到运营过程中的税务申报,再到知识产权的保护与资质办理,…