尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:P13882 [蓝桥杯 2023 省 Java A] 小蓝的旅行计划

题解:P13882 [蓝桥杯 2023 省 Java A] 小蓝的旅行计划
📅 发布时间:2026/6/20 23:30:27

挺可爱的反悔贪心,乍一看没看出和旅行家的预算的区别,甚至做完才发现不一样的说。

正文

首先我们可以将操作分为两个部分。分别是用油操作和加油操作。

用油

有一个简单的贪心策略,用油的时候首先使用最便宜的油,这点显然。

此外,如果当前油箱里所有油都不能到达下一站,自然就是无解,输出 \(-1\)。

加油

这一部分稍微复杂点,我们显然是不太知道要加多少油的,那不妨直接全加,加到油箱满了为止,然后再把油箱里贵的油退出去,加入更便宜的油。

那可能就会导致浪费,钱算多了怎么办?

我们可以将油想象成一种只有用了才会计算价钱的东西,将花钱挪到用油的部分里面,用一点油,花一点钱就可以了。

实现细节

  1. 计算花费要开 long long。
  2. 每个站点只加一次油,而不是将油分开一点一点加,否则无法保证复杂度。

还有什么不明白的可以看代码,我这里给出一种 multiset 的实现。

代码

// code by 樓影沫瞬_Hz17
#include <bits/stdc++.h>
using namespace std;#define getc() getchar_unlocked()
#define putc(a) putchar_unlocked(a)
#define en_ putc('\n')
#define e_ putc(' ')using lint = long long;
using pii = pair<int, int>;template<class T> inline T in() { T n = 0; char p = getc();while (p < '-') p = getc();bool f = p == '-' ? p = getc() : 0;do n = n * 10 + (p ^ 48), p = getc();while (isdigit(p));return f ? -n : n;
}
template<class T> inline T in(T &a) { return a = in<T>(); }template<class T> inline void out(T n) {if(n < 0) putc('-'), n = -n;if(n > 9) out(n / 10);putc(n % 10 + '0');
}const int N = 2e5 + 10, B = 560;int dis[N], c[N], lim[N];signed main() {#ifndef ONLINE_JUDGEfreopen("i", "r", stdin);freopen("o", "w", stdout);#endifint n = in<int>(), m = in<int>(), sum = m; // sum 是当前油量lint cost = 0;for(int i = 1; i <= n; i ++) {in(dis[i]), in(c[i]), in(lim[i]);}// 不用 set 因为 set 会去重(虽然这题没差)multiset<pii> e; // 用 pair,第一维用来排序,是价格,第二维自然就是油量e.insert({0, m}); // 给不会 set 的补充一下:insert 用来给 set 插入东西for(int i = 1; i <= n; i ++) {while(dis[i] != 0) {if(e.empty()) { // 油箱空了就无解out(-1);exit(0);}int t = e.begin()->second, k = e.begin()->first, red = min(dis[i], t);e.erase(e.find(*e.begin())); // begin 返回 set 中最小值的指针//erase 用来删除 set 的中某值或某指针的所在// 这里先 find 再 erase 是为了只删一个,否则会删除某个值的所有所在dis[i] -= red, t -= red, sum -= red;cost += 1ll * k * red;if(t) e.insert({k, t}); // 这几行是跑路的过程,注意实现细节。 }int ine = 0; // 记录加多少while(lim[i] != 0) {if(sum < m) {int add = min(lim[i], m - sum); // 油箱没满就加满lim[i] -= add, sum += add;ine += add;}else {if(e.empty()) break; // 不然就用便宜油代替贵油int t = e.rbegin()->second, k = e.rbegin()->first, red = min(lim[i], t);if(k <= c[i]) break; // rbegin == end - 1,即最大值e.erase(e.find(*e.rbegin()));t -= red, lim[i] -= red;ine += red;if(t) e.insert({k, t});}}e.insert({c[i], ine}); // 必须只加一次,否则复杂度无保证}out(cost); en_;
}   
// 星間~ 干渉~ 融解~ 輪迴~ 邂逅~ 再生~ ララバイ~

相关新闻

  • 深入解析:无人设备遥控器之帧同步技术篇
  • 更快的布尔矩阵乘法
  • 干货预警!Apache SeaTunnel 助力多点 DMALL 构建数据集成平台,探索AI新零售行业应用!

最新新闻

  • 跨境独立站从0到1全教程:选型、部署、引流、选品
  • 2026梧州漏水检测维修本地口碑防水商家榜单:厨卫/阳台/屋面/地下室渗漏水维修,持证施工+明码实价,防水补漏公司TOP5推荐 - 即刻修防水
  • 国内高校毕业生最适用的AI论文写作工具有哪些?
  • 2026年质量好的大电流耐火母线电缆/中压大电流柔性母线电缆/大电流密集型母线槽/铠装大电缆柔性母线电缆推荐厂家精选 - 行业平台推荐
  • 2026年北京彩石瓦直销厂家找哪家,老房屋顶改造/长城隔热铝瓦/彩石瓦/自建房屋顶用瓦/翻修屋顶,彩石瓦安装施工队推荐 - 品牌推荐师
  • 上海音响改装门店抉择:上海冉声汽车音响定制方案全解析,宝马原厂音响升级/奔驰音响改装,音响改装门店哪个好 - 音响改装门店分享

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号