当前位置: 首页 > news >正文

csp信奥赛C++高频考点专项训练之前缀和差分 --【一维差分】:海底高铁

csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维差分】:海底高铁

题目描述

该铁路经过N NN个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票。第i ii段铁路连接了城市i ii和城市i + 1 ( 1 ≤ i < N ) i+1(1\leq i<N)i+1(1i<N)。如果搭乘的比较远,需要购买多张车票。第i ii段铁路购买纸质单程票需要A i A_iAi博艾元。

虽然一些事情没有协调好,各段铁路公司也为了方便乘客,推出了 IC 卡。对于第i ii段铁路,需要花C i C_iCi博艾元的工本费购买一张 IC 卡,然后乘坐这段铁路一次就只要扣B i ( B i < A i ) B_i(B_i<A_i)Bi(Bi<Ai)元。IC 卡可以提前购买,有钱就可以从网上买得到,而不需要亲自去对应的城市购买。工本费不能退,也不能购买车票。每张卡都可以充值任意数额。对于第i ii段铁路的 IC 卡,无法乘坐别的铁路的车。

Uim 现在需要出差,要去M MM个城市,从城市P 1 P_1P1出发分别按照P 1 , P 2 , P 3 , ⋯ , P M P_1,P_2,P_3,\cdots,P_MP1,P2,P3,,PM的顺序访问各个城市,可能会多次访问一个城市,且相邻访问的城市位置不一定相邻,而且不会是同一个城市。

现在他希望知道,出差结束后,至少会花掉多少的钱,包括购买纸质车票、买卡和充值的总费用。

输入格式

第一行两个整数,N , M N,MN,M

接下来一行,M MM个数字,表示P i P_iPi

接下来N − 1 N-1N1行,表示第i ii段铁路的A i , B i , C i A_i,B_i,C_iAi,Bi,Ci

输出格式

一个整数,表示最少花费。

输入输出样例 1
输入 1
9 10 3 1 4 1 5 9 2 6 5 3 200 100 50 300 299 100 500 200 500 345 234 123 100 50 100 600 100 1 450 400 80 2 1 10
输出 1
6394
说明/提示

2 223 33以及8 889 99买票,其余买卡。

对于30 % 30\%30%数据M = 2 M=2M=2

对于另外30 % 30\%30%数据N ≤ 1000 N\leq1000N1000M ≤ 1000 M\leq1000M1000

对于100 % 100\%100%的数据M , N ≤ 10 5 M,N\leq 10^5M,N105A i , B i , C i ≤ 10 5 A_i,B_i,C_i\le10^5Ai,Bi,Ci105

思路分析

题目要求计算在给定行程下,为每一段铁路选择购卡或单程票的最小总花费。
关键步骤:

  1. 统计每段铁路被经过的次数:
    • 给定城市序列 (P 1 , P 2 , … , P M P_1, P_2, \dots, P_MP1,P2,,PM),相邻两次访问 (P j P_jPj) 到 (P j + 1 P_{j+1}Pj+1) 经过的区间为 ([ min ⁡ ( P j , P j + 1 ) , max ⁡ ( P j , P j + 1 ) − 1 ] [\min(P_j,P_{j+1}), \max(P_j,P_{j+1})-1][min(Pj,Pj+1),max(Pj,Pj+1)1])。
    • 使用差分数组 (d) 对每个区间加 (1),最后前缀和得到每段铁路的经过次数 (k_i)。
  2. 对第 (i) 段铁路,两种方案花费为:
    • 全单程票:(k i × A i k_i \times A_iki×Ai)
    • 买卡:(C i + k i × B i C_i + k_i \times B_iCi+ki×Bi)(因为B i < A i B_i < A_iBi<Ai,购卡后每次花费更少)
      取较小值累加即得答案。
  3. 注意数据范围,使用long long避免溢出。

代码实现

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intmain(){intn,m;scanf("%d%d",&n,&m);// n:城市数,m:访问次数vector<int>p(m);// 访问序列for(inti=0;i<m;++i)scanf("%d",&p[i]);vector<ll>d(n+2,0);// 差分数组,1~n-1有效for(inti=0;i<m-1;++i){// 处理每对相邻城市inta=p[i],b=p[i+1];intl=min(a,b),r=max(a,b)-1;// 经过的铁路区间if(l<=r){// 区间非空d[l]+=1;// 差分左端点+1d[r+1]-=1;// 右端点后一位-1}}ll cnt=0,ans=0;// cnt:当前铁路累计次数for(inti=1;i<n;++i){// 遍历1~n-1段铁路cnt+=d[i];// 前缀和得到经过次数ll a,b,c;scanf("%lld%lld%lld",&a,&b,&c);ans+=min(cnt*a,c+cnt*b);// 取较小花费}printf("%lld\n",ans);return0;}

功能分析

  1. 差分统计经过次数:利用d[l] += 1, d[r+1] -= 1在 O(1) 时间内标记区间,最后前缀和得到每条铁路的真实经过次数,时间复杂度 O(N+M)。
  2. 逐段决策:对每条铁路,比较全单程票总价与买卡并充值总价,选择较小者累加。
  3. 空间优化:只使用两个数组(访问序列 p 和差分数组 d),d 大小 N+2,满足10 5 10^5105数据范围。

【完整系列请查看专栏】:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++提高组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.zskr.cn/news/1415284.html

相关文章:

  • 别再手动配SNMP了!用组策略和注册表批量部署Windows 10监控代理的完整指南
  • 小吨位悬臂吊选型攻略:厂家推荐+避坑要点,新手轻松选合适设备 - 品牌优选官
  • 2026义乌婚纱摄影口碑大排行 备婚新人选店可直接参考 - 江湖评测
  • Datasheet学习5(STM32)(TODO)
  • 杰理之开机先报开机提示音在切换蓝牙模式【篇】
  • vxe-table 拖拽列字段对数据进行分组
  • addBumpConnectTargetConstraint 命令详解
  • Nodejs开发者如何通过Taotoken稳定调用Claude模型
  • UniXcoder终极指南:统一跨模态代码智能助手
  • 不止于安装HAP:用hdc_std命令行高效管理你的OpenHarmony设备(文件传输、日志抓取、进程查看)
  • CyberpunkSaveEditor:免费终极赛博朋克2077存档修改器使用指南
  • 3大核心策略:用SysML v2彻底解决复杂系统建模的协作难题
  • 2026产品运营如何提升职场素养:打造专业形象与高价值成长路径
  • Smithbox:打破游戏修改壁垒的终极工具
  • TMSpeech:Windows平台实时语音转文字工具,3倍提升会议记录效率
  • 如何轻松让旧iPhone/iPad重获新生:LeetDown降级工具完全指南
  • 实战解析:基于Flink与图数据库的欺诈检测系统如何拦截大规模攻击
  • AI主播生成新纪元已至(Sora 2内测权限倒计时48小时):头部MCN实测转化率提升217%的5个隐藏参数
  • Galanin (1-16) (porcine, rat) ;GWTLSAGYLLGPHAI
  • 触觉分辨率不足?融合本体感觉实现低成本机器人精准物体识别
  • 原神自动化助手终极指南:3步轻松实现游戏全自动操作
  • 呼和浩特黄金回收哪家门店更实在 五家本地店横向对比帮你避坑 - 专业黄金回收
  • 2026年湖北白蚁防治口碑排行榜:益民生物科技综合实力突出 - 资讯焦点
  • 如何选择安全的杉德斯玛特卡回收平台?避免这些常见陷阱! - 团团收购物卡回收
  • 告别Vivado卡顿!用VCS2018+Makefile独立仿真Xilinx IP核的保姆级流程
  • 别只当仿真工具用!用Comsol复现经典传热教材案例,深化你的物理模型理解
  • 深入GTH收发器:从8B/10B编解码到Comma对齐,搞懂高速串行链路的数据对齐机制
  • Cartographer建图精度上不去?可能是你的IMU和Lidar外参没标定!一份实操指南
  • 科研绘图网站推荐:科秒AI,全科研生涯适配的学术可视化解决方案 - 博客万
  • 为什么你的Sora 2 NeRF输出模糊、闪烁、漂移?:20年图形学专家紧急发布的3大隐式场梯度坍塌诊断协议