news 2026/3/23 4:00:29

PAT 1033 To Fill or Not to Fill

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PAT 1033 To Fill or Not to Fill


这一题的大意是从杭州到目的地,让我们找需要花费最少多少钱用于加油。要注意的是在沿途中有加油站,不同加油站的价格也各不相同,油箱中的油有限,我们如何选择加油,能花费最少的达到目的地呢?
这一题要用到贪心,即当我们达到一个站点的时候,我们看如果在这个站点加满油能跑的距离内,有没有比当前站点油价更便宜的加油站,如果有,我们只需要在当前加油站加到能跑到更便宜的油即可,如果没有,那么说明当前的加油站的油就是最便宜的,加满即可。如果最终达到不了终点,那么输出最远能到的距离。最开始油箱为空。
接下来我们就需要分情况讨论了
如果起点没有加油站,那么就直接输出最远距离为0。
如果有加油站,我们就从起点开始按照贪心的思路来加油 即:我们看如果在这个站点加满油能跑的距离内,有没有比当前站点油价更便宜的加油站,如果有,我们只需要在当前加油站加到能跑到更便宜的油即可,如果没有,那么说明当前的加油站的油就是最便宜的,加满即可。
要注意如果,当前的加油站的油就是最便宜,我们不一定非要找下一个站点,可以看是否能通过当前站点直接到终点。(测试点4)
如果在当前站点无法直接到终点,那么我们就看有没有后继加油站,如果有,我们就加满油跑到后继的加油站(必须加满,因为后继的加油站的油价比当前的贵,尽可能少加)
如果没有后继节点,那么我们只能选择从当前节点看能不能跑到终点。如果能输出cost,如果不能输出最大跑的距离。
完整代码如下:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;//驾驶一个汽车从杭州到其他任意城市是容易//但一个车的油箱容量是有限的//我们不得不找加油站有时//不同的汽油站可能给出不同的价格,//你被要求去设计最便宜的路径去走structnode{intd;doubleprice;}n[505];boolcmp(node a,node b){if(a.d<b.d){returntrue;}elseif(a.d==b.d){if(a.price<b.price){returntrue;}else{returnfalse;}}else{returnfalse;}}intmain(){intCmax;//油箱容量cin>>Cmax;intD;//杭州到目的地的距离//每一单元油能跑的平均距离// 汽油站总共的数量// 下面N个数分别表示 油价和这个停车场距离杭州的距离//cin>>D;intDavg;cin>>Davg;intN;cin>>N;for(inti=0;i<N;i++){cin>>n[i].price>>n[i].d;}sort(n,n+N,cmp);doublemaxdistance=0.00;doublecost=0.00;doublecapcility=0;if(n[0].d!=0){//说明在0点出没有加油站printf("The maximum travel distance = %.2f",maxdistance);return0;}intcur=0;while(cur<N){doubleminn=1e18;intindex=-1;for(inti=cur+1;i<N&&n[i].d<=n[cur].d+Cmax*Davg;i++){//说明i这个节点可用到达if(n[i].price<minn){minn=n[i].price;index=i;}if(n[i].price<n[cur].price){minn=n[i].price;index=i;break;//说明比当前的油价还要低//那么我们就应该先跑到油价最低的位置}}if(minn<n[cur].price){//只需要加能到index站点的油即可doubledistance=n[index].d-n[cur].d;//这是两者的距离doubleqiantity=1.00*distance/Davg;//需要的油量if(capcility>=qiantity){capcility-=qiantity;}else{cost+=(qiantity-capcility)*n[cur].price;//再加这么多油capcility=0;}maxdistance+=distance;}elseif(n[cur].d+Cmax*Davg>=D){//说明我们可用直接跑过去了,不用再找中间点了中间点也起不到减少耗费的作用doubleenddistance=D-n[cur].d;doubleqiantity=1.00*enddistance/Davg;if(capcility>=qiantity){capcility-=qiantity;}else{cost+=(qiantity-capcility)*n[cur].price;//再加这么多油capcility=0;}printf("%.2f",cost);break;}elseif(minn<INT_MAX){//说明存在下一站//我们要在当前站加满油cost+=(Cmax-capcility)*n[cur].price;capcility=max(0.0,Cmax-(1.00*(n[index].d-n[cur].d)/Davg));maxdistance+=n[index].d-n[cur].d;}else{//说明没有下一站可用用来加油了,//必须保证当前加满油看能不能能跑到终点////我们看一下从当前站点到终点站的距离doubleenddistance=D-n[cur].d;doubleqiantity=1.00*enddistance/Davg;if(Cmax*Davg>=D-n[cur].d){//说明加满油能跑到if(capcility>=qiantity){capcility-=qiantity;}else{cost+=(qiantity-capcility)*n[cur].price;//再加这么多油capcility=0;}//说明能到达终点printf("%.2f\n",cost);break;}else{maxdistance=n[cur].d+Cmax*Davg;printf("The maximum travel distance = %.2f\n",maxdistance);break;}}if(index!=-1){cur=index;}}return0;}

总结:这一题是贪心的思路,我们要找到最优的思路,这是这一题的第一大难点,第二大难点就是,我们需要分情况讨论,想好各种情况。
贪心往往也会涉及到排序

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/8 21:35:53

ARM Cortex-M4 FPU单精度浮点数处理手把手教程

掌握Cortex-M4的浮点运算&#xff1a;从原理到实战的完整指南你有没有遇到过这样的情况&#xff1f;在做电机控制时&#xff0c;PID计算结果总是“跳变”&#xff1b;写音频滤波器时&#xff0c;系数调来调去都不对劲&#xff1b;移植一个开源FFT算法&#xff0c;发现编译通过了…

作者头像 李华
网站建设 2026/3/15 11:37:31

研发数字化转型怎么实现从经验驱动到数据预言的跃迁?

在工业4.0与数字经济加速演进的今天&#xff0c;研发数字化转型已不再是企业可选的“技术升级”&#xff0c;而是决定生死存亡的战略命题。传统研发模式长期受困于“数据孤岛、知识断层、协同低效”三大顽疾——设计、工艺、生产各自为政&#xff0c;图纸版本混乱&#xff0c;工…

作者头像 李华
网站建设 2026/3/21 11:13:29

TikTok Shop 进化全解析,从内容驱动到品牌共建,抢占跨境新赛道

2025年黑色星期五的硝烟刚刚散去&#xff0c;TikTok Shop的官方战报如预期般亮眼——多国市场、尤其是北美市场&#xff0c;实现了强劲的销售额增长&#xff0c;然而&#xff0c;在这些光鲜的宏观数据之下&#xff0c;无数参与其中的卖家们却体验着一场深刻的“冰火两重天”&am…

作者头像 李华
网站建设 2026/3/20 10:33:15

openmv与stm32通信帧格式定义:F4系列代码级说明

OpenMV 与 STM32F4 通信帧设计实战&#xff1a;从协议定义到代码落地在嵌入式视觉系统中&#xff0c;OpenMV是一个极具价值的“视觉传感器”模块。它集成了摄像头、微控制器和图像处理算法&#xff0c;能够完成目标识别、颜色追踪、二维码读取等任务。然而&#xff0c;受限于算…

作者头像 李华
网站建设 2026/3/21 6:54:15

28、使用LINQ to SQL进行数据操作

使用LINQ to SQL进行数据操作 在数据处理中,LINQ to SQL 是一种强大的工具,它允许我们使用 C# 对象来操作数据库。下面将详细介绍如何使用 LINQ to SQL 进行数据的检索、更新和删除操作。 1. 数据检索 要使用生成的 LINQ to SQL 代码从映射的三个表中检索数据,可将 Prog…

作者头像 李华
网站建设 2026/3/16 10:40:32

python医院问诊挂号处方信息管理系统_e9xw2_pycharm django vue flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 python医院问诊挂号处方信息管理系统_e9xw2_pycharm django v…

作者头像 李华