pat1033To Fill or Not to Fill (25)

13 万字 C 语言从入门到精通保姆级教程2021 年版 13 万字C语言保姆级教程,从入门到精通。 阅读详情

题意分析:

(1)给出从出发地到目的地之间的若干个加油站的信息(每升价格 距出发点距离)以及油箱容量、目的地、每升油公里、油站数,出发时油箱为空,问要到达目的地的最少开销,如不能到达目的地,求出最多能够走多远。

这题分明显是一道贪心算法题,贪心算法题最主要的是理清贪心的策略:

算法前准备:

①将站点信息包装成结构体

②输入的站点时候过滤掉在目的地之外的站点(距离超过目的地),这些站点毫无用处,对后面的算法造成干扰

③对站点按照离出发点的距离升序排序

④将目的地看成是价格为0的加油站,这样处理起来比较统一

贪心策略:

①若车子当前在A站停留,若在A站加满油之后行驶却没有可达的任意站点,这时候最大距离为A.distance+maxDistance,maxDistance为加满油能行驶的最大距离

②若非①,设A站之后按顺序可达的站点有B、C、D....,在这些站中找出第一个价格比A站便宜的站点,然后在A站加到恰好能够到达此站的油量

③若非②,A之后可达站没有比A便宜的站点,且终点站包含在其中,则加油到恰好能够到达终点站

④若非③,在B、C、D....这些站中找出价格最便宜的站作为下一站,此时加满油行驶至该站,因为后面的站没有比当前更便宜的


可能坑点:

(1)当没有距离为0的站点时,永远不可达,最大距离永远是0.00

(2)邮箱油量(最大容量)、距离、每升油行驶公里数都是浮点数类型,且每到一个站加油时,要更新油箱中的油量才能计算出需要加多少油

(3)终点站一定没有剩余的油

(4)在贪心的后三步中无需考虑剩余的油是否可以支撑到下一个约定的加油站,理由很简单,如果剩余的油能够直接到达下一站,则此站无需停留。

(5)此题的测试数据不够严谨,在贪心策略的第三步,若加满油开到终点居然也可以通过测试

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;

struct station
{
    double price;
    double distance;
};
station s[501];
bool cmp(station a,station b)
{
    return a.distance<b.distance;
}
int main()
{
    double C,D,A;
    int N;
    cin>>C>>D>>A>>N;
    double maxDistance=C*A;
    int i=0;
    station temp;
    while(i<N)
    {
        cin>>temp.price>>temp.distance;
        //过滤掉目的地之外的加油站
        if(temp.distance<=D)s[i]=temp;
        i++;
    }
    s[i].price=0;
    s[i].distance=D;
    sort(&s[0],&s[i+1],cmp);
    if(s[0].distance!=0)
    {
        cout<<"The maximum travel distance = 0.00"<<endl;
        return 0;
    }
    double totalPrice=0;
    double maxLength=0;
    double remain=0;
    int j=0;
    while(j<i&&maxLength<D)
    {
        if((j<i-1)&&(s[j+1].distance-s[j].distance>maxDistance))
        {
            maxLength=s[j].distance+maxDistance;
            double cost=(C-remain)*s[j].price;
            totalPrice+=cost;
            break;
        }
        if(j==(i-1))
        {
            if(D-s[j].distance>maxDistance)
            {
                double cost=(C-remain)*s[j].price;
                totalPrice+=cost;
                maxLength=s[j].distance+maxDistance;
            }
            else
            {
                double cost=((D-s[j].distance-remain*A)/A)*s[j].price;
                totalPrice+=cost;
                maxLength=D;
            }
            break;
        }
        double minPrice=s[j+1].price;
        int nextStation=j;
        int cheapestStation=j+1;
        int flag=1;
        //确定下一个需要加油的站点
        for(int k=j+1;s[k].distance-s[j].distance<=maxDistance&&k<i;k++)
        {
            if(s[k].price<minPrice)
            {
                minPrice=s[k].price;
                cheapestStation=k;
            }
            if(flag&&s[k].price<=s[j].price)
            {
                nextStation=k;
                flag=0;
            }
        }
        if(minPrice>s[j].price)nextStation=cheapestStation;
        //如果下一确定要加油的站油费比当前站的油费要便宜或者相等,要加到恰好能够到达那一站
        //反之,如果下一确定要加油的站A比当前站的油费要贵,就干脆全加满,因为A站之后的站更不会比当前站更便宜了
        if(s[nextStation].price<=s[j].price)
        {
            //注意这里并不需要做判断,在此站加油,意味着油箱里的油不够到达下一站,反之如果能够到达下一站,何必要在此战停留呢
            double cost=((s[nextStation].distance-s[j].distance-remain*A)/A)*s[j].price;
            totalPrice+=cost;
            remain=0;
            maxLength=s[nextStation].distance;
        }
        else
        {
            if(D-s[j].distance>maxDistance)
            {
                double cost=(C-remain)*s[j].price;
                totalPrice+=cost;
                remain=C-(s[nextStation].distance-s[j].distance)/A;
                maxLength=s[nextStation].distance;
            }
            else
            {
                double cost=((D-s[j].distance-remain*A)/A)*s[j].price;
                totalPrice+=cost;
                remain=0;
                maxLength=D;
                break;
            }
        }
        j=nextStation;
    }
    if(maxLength==D)cout<<setiosflags(ios::fixed)<<setprecision(2)<<totalPrice<<endl;
    else cout<<"The maximum travel distance = "<<setiosflags(ios::fixed)<<setprecision(2)<<maxLength<<endl;
    return 0;
}

本题的坑点参考自Sup_Heaven的博客: http://blog.youkuaiyun.com/sup_heaven/article/details/19006527



大模型系列——Ollama简明教程 在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解—— 阅读详情

相关推荐

1.30 Cubemx_STM32H743 SD_Card纳入文件管理系统

Cubemx_STM32H743 SD_Card纳入文件管理系统1、简介2、CubeMX配置 1、简介 和前面文章原理其实一样的。 1.29 Cubemx_STM32F429\H743 nandflash、spifalsh纳入文件管理系统 现在一并将SD卡、NandFlash、SPIFlash一并作为文件管理。 下面直接介绍SDcard,其他参考前面文章。 2、CubeMX配置 ...

oDuanYanGuHong的博客 1080

PAT 甲级 1033 To Fill or Not to Fill (25分) 贪心

PAT 甲级 1033 To Fill or Not to Fill (25分) 贪心

星辰不问 195

RK3588开发板DDR频率上不去?手把手教你用ddrbin_tool降频调优(附完整配置流程)

本文详细介绍了RK3588开发板DDR频率调优的完整解决方案,重点使用ddrbin_tool工具进行降频配置。从硬件原理分析到实战操作,包括参数导出、频率调整、二进制生成及烧录验证,帮助开发者解决DDR高频不稳定问题,提升系统可靠性。适用于嵌入式开发、工业控制等场景。

weixin_42713608的博客 544

PAT1033 旧键盘打字(Java)

注意:用Scanner sc=new Scanner(System.in)读入字符会导致测试点4超时,此处换成以下代码即可拿满。②针对出现字符“+”的情况用一个boolean类型变量记录,在判断完s1的所有字符后,再把大写的字母都加入到HashSet中。①将s1为字母的大小写都包含在hashset中(用hashset可以保证字符只出现一次)思路:用HashSet存储换掉的键盘。

weixin_46246000的博客 293

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 668

DLMS-Blue-Book蓝皮书—曲线类

attribute_index 1 指的是第 1 个属性(即 logical_name),attribute_index 2 指的是第 2 个属性,等等;如果其他“曲线通用类”对象捕获了这个缓冲区,它们的缓冲区也将被清空,以保证它们的缓冲区条目是同质的。如果捕获对象是曲线通用类的缓冲区,则 data_index 标识缓冲区(即列)中的捕获对象(即内部曲线通用类中的列);如果曲线通用类已排序,则调用捕获方法将把新条目存储在缓冲区中的适当位置,移动所有后续条目,并可能丢失最不相关的条目。

一个bug是bug,多个bug能work 1453

PAT甲级1033 To Fill or Not to Fill (贪心算法)

原题链接 PAT甲级1033 题目大意 一辆车从杭州出发,前往目的地,途径若干个加油站,若能到达目的地,输出加油所花费的钱,若不能,输出能到达的最大距离。 解题思路 本题的核心思想就是尽量使用最便宜的油行驶。所以我们建立一个数组cheapSta[500],cheapSta[i]表示从加油站i出发在满油行驶距离之内的第一个比当前油站价格更低的站或者价格最低的油站。这个数组也代表了行驶线路。 建立递归函数Travel()。路线既然确定好了,那么我们需要判断汽车怎么加油。根据贪心算法的思想,汽车应尽量使用便宜的

Dae_Lzh的博客 1422

PX4从放弃到精通(二十八):垂起过渡控制

固件版本:1.14.0可加名片交流学习。

超维空间科技的博客 2874

PAT甲级 1033 To Fill or Not to Fill (25分)

1033 To Fill or Not to Fill (25分) 题目链接:PAT A 1033 题目大意:输入第一行给出四个数,分别是油箱最大容量,杭州到目的地的距离,每单位的油能让汽车跑多远以及加油站的数目。默认初始时汽车的油箱是空的,在任意加油站可以加任意数目的油(不能超过汽车油箱最大容量),要求输出从杭州到目的地所需要油价最少的钱数,如果无法到达目的地,则输出能够行驶的最大距离。 思...

weixin_43684054的博客 289

OpenClaw人人养虾:配置通义千问(Qwen)

通义千问(Qwen)是阿里云推出的大语言模型系列。OpenClaw 支持通过 Qwen Portal 插件实现 OAuth 免费额度认证,每日可免费使用 2000 次请求,无需绑定支付方式。

王国平的博客 1257

Debezium系列之:深入理解 Debezium Topic的设置要求

Debezium系列之:配置 Debezium Topic

zhengzaifeidelushang的博客 1009

PAT——1033 旧键盘打字

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

Jamaple的博客 273

如何正确理解和获取S参数

差分四端口的S参数是由双端口S参数逐步演化而来,因此,在数学中,其各分量均可以从单端S参数推导而来,在实际的仿真和测试中,软件和测量设备也是通过获取单端S参数矩阵再进行运算得到混合S参数矩阵的,并非直接获取。

一只豌豆象的博客 5153

PAT 1033. To Fill or Not to Fill (25)

1033. To Fill or Not to Fill (25) 时间限制 10 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 ZHANG, Guochuan With highways available, drivi

凌风 2316

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PAT甲级 1033 To Fill or Not to Fill(25) (贪心)

PAT甲级 1033 To Fill or Not to Fill(25) (贪心)

NHS6671的博客 320

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PAT真题练习(甲级)1033 To Fill or Not to Fill (25 分)

PAT真题练习(甲级)1033 To Fill or Not to Fill (25 分) 原题网址:https://pintia.cn/problem-sets/994805342720868352/problems/994805458722734080 A graph which is connected and acyclic can be considered a tree. The ...

Be Quick & Clever & Lucky 403

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

1033. To Fill or Not to Fill (25)-PAT

With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different ga

兵临城下 829

PAT甲级1033 To Fill or Not to Fill (25 分)

1033To Fill or Not to Fill(25分) With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the...

Dexter 269

【PAT甲级】1033 To Fill or Not to Fill (25分)

解题过程的小记录,如有错误欢迎指出。 难度:四星 小导航~题目分析注意点我的解题过程思路bug代码dalao的代码借鉴点 题目分析 注意点 我的解题过程 思路 bug 一开始毫无思路,无从着手 代码 dalao的代码 全部代码因版权原因不放出来,大家可以自行去柳神博客购买或者参考晴神的上机笔记~ 借鉴点 ...

SpicyChicken的自我修养 350

PAT A1033 To Fill or Not to Fill (25分)

#include <cstdio> #include <algorithm> using namespace std; struct Station{ double price; double dis; }; bool cmp(Station s1, Station s2){ return s1.dis < s2.dis; } int main(){ int num; double unit, sumdis, maxcap; scanf("%lf %lf .

weixin_45964844的博客 139

PAT 1033 To Fill or Not to Fill (25分)

题目 With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to

余生愿你常欢笑 328

PAT A 1033 To Fill or Not to Fill (25 分)

一、思路 (一)最低油价方案: 1.若前面有一个价格比本站便宜的油站,那就去那边加更便宜的油,且只在本站加够到达低价油站的油; 2.若前面油站都比本站要贵,说明本站的油是当前最便宜的,要把油加满,下一个目的地的前面一段路上相对最便宜的油站。 (二)逻辑: 有两种情形:下一个目的地是油站,或下一个目的地是终点。 1.下一个目的地是油站的情况: (1)若前方存在价格更便宜的油站,且在可达范围内,且比终...

Siumai's Blog 217

PAT (Advanced Level) 1033 To Fill or Not to Fill (25分)【贪心】

PAT (Advanced Level) 1033 To Fill or Not to Fill (25分)【贪心】 题意:给你油箱容量 CCC,给你最远想要到达的距离 DDD,给你汽车每升油所能支持的距离 DavgD_{avg}Davg​,给你加油站的数量 NNN。 然后每个加油站,给你距离起点的位置以及油价。 问,你最少可以花费多少美元到达终点。 分析:作为老 DPDPDP 恐慌性选手,起手就是一顿动态规划,然而最后复杂度在 30000∗500∗50030000 * 500* 50030000∗500∗

Irish_Moonshine的博客 246

PAT甲级-1033 To Fill or Not to Fill (25分)

点击链接PAT甲级-AC全解汇总 题目: With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time ...

卷子的博客 371

PAT 甲级 1033 Fill or Not to Fill (25分)

PAT 甲级 1033 Fill or Not to Fill (25分) 题目 With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations ...

努力不脱发的程序媛 253

【贪心】PAT 1033. To Fill or Not to Fill (25) code up To Fill or Not to Fill

1033. To Fill or Not to Fill (25) 声明:本文转自大佬的博客,博主自己拜读后写一下自己的想法 传送门:传送门 时间限制 10 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 ZHANG, Guochuan With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a

weixin_45981887的博客 216
上一篇: pat1032Sharing (25)
下一篇: pat1034Head of a Gang (30)
LostStephon
博客等级 码龄11年 14粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值