pat1033To Fill or Not to Fill (25)

superpowers-中文使用说明 《obra/superpowers:AI辅助开发的流程纪律工具集》 摘要:obra/superpowers是一套面向AI辅助软件开发的系统化流程规范,包含14个核心技能,强调"先理解后行动"的纪律性开发方法。该工具集定义了从头脑风暴到代码评审的完整工作流,要求严格遵循测试驱动开发、子代理隔离执行等原则。核心特色包括:1) 任何实现前必须完成设计和评审;2) 采用红-绿-重构的TDD循环;3) 复杂任务通过独立子代理串行处理;4) 所有产出需经过双重验证(规格合规+代码质量)。该工具集特别注重文档化和可验证性 阅读详情

题意分析:

(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



【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装 Clamshell 拆卸与安装。 阅读详情

相关推荐

Excel也能玩转K-means聚类?手把手教你用表格搞定用户分群(附完整公式)

本文详细介绍了如何在Excel中实现K-means聚类算法,无需编程即可完成用户分群。通过SUMIF、SQRT等基础函数,从数据预处理到最终分群全流程手把手教学,特别强调数据标准化和迭代优化的关键步骤,帮助运营团队低成本高效分析用户行为数据。

weixin_30555125的博客 181

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

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

星辰不问 195

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 317

PAT1033 旧键盘打字(Java)

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

weixin_46246000的博客 293

同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

来源:雪球App,作者: 同花顺-iFinD,(https://xueqiu.com/6706494343/141951051)金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够...

weixin_35911805的博客 2万+

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

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

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

Dae_Lzh的博客 1422

轨迹规划——带抛物线过渡的直线插补

带抛物线过渡的直线插补

doudou2weiwei的博客 1985

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

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

weixin_43684054的博客 289

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3696

一周一个Unity小游戏2D反弹球游戏 - 球反弹的方向

本文将实现当球在球板上反弹时,会根据球板移动的方向来给球施加反弹的力,例如当球板往左移动时反弹球,则球应向左上方反弹,若球板往右移动时反弹球,则球应向右上方反弹。

Giver的博客 752

PAT——1033 旧键盘打字

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

Jamaple的博客 273

【100%通过率】2023华为od机试C卷【电脑病毒感染】Java&Go 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 2862

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

NHS6671的博客 320

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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、付费专栏及课程。

余额充值