To Fill or Not to Fill

PAT甲级真题 1033 To Fill or Not to Fill (25分) C++实现(贪心法) 题目 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. Differen... 阅读详情

                                                                                               To Fill or Not to Fill


                                                                       Time Limit: 2 Seconds      Memory Limit: 65536 KB

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 carefully design the cheapest route to go.

Input :

Each input file contains one test case. For each case, the first line contains 4 positive numbers: C~max~ (<= 100), the maximum capacity of the tank; D (<=30000), the distance between Hangzhou and the destination city; D~avg~ (<=20), the average distance per unit gas that the car can run; and N (<= 500), the total number of gas stations. Then N lines follow, each contains a pair of non-negative numbers: P~i~, the unit gas price, and D~i~ (<=D), the distance between this station and Hangzhou, for i=1,...N. All the numbers in a line are separated by a space.

Output :

For each test case, print the cheapest price in a line, accurate up to 2 decimal places. It is assumed that the tank is empty at the beginning. If it is impossible to reach the destination, print "The maximum travel distance = X" where X is the maximum possible distance the car can run, accurate up to 2 decimal places.

Sample Input

50 1300 12 8
6.00 1250
7.00 600
7.00 150
7.10 0
7.20 200
7.50 400
7.30 1000
6.85 300
50 1300 12 2
7.10 0
7.00 600

Sample Output

749.17
The maximum travel distance = 1200.00

 

题意:给你油箱容量Cmax,总路程D,单位油可行驶路程Da,站点数N,计算到达目的地需要的最小花费。油箱最开始是空的

思路:贪心。

①按距离从小到大排序。

②初始点是否有站点,没有站点无法起步,输出0;

③当前站不加油,是否能直接到达终点。

④判断当前站点可达范围内是否存在比当前油价低的站点。

若有,1)油量足够,直接行驶到比当前油价低的站点。2)油量不足,加油到恰好足够行驶到比当前 油价低的站点。

若无,找到可达范围内油价最低的站点,并且在当前站点把油加满(如果当前站点可以直接到达终点,就直接加油到终点)。

若当前可达范围内没有站点,答案为当前站点距离+可行驶最大距离。

⑥当前站点为最后一站,要么直接去终点,要么到不了终点。

 

PS:可能思考不够仔细,见谅。

 

 

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn =550;
struct Station{
    double p;
    double d;
}s[maxn];
bool cmp(Station a,Station b)
{
    return a.d<b.d;
}
int main()
{
    int Cmax,D,Da,N;
    while(scanf("%d%d%d%d",&Cmax,&D,&Da,&N)!=EOF)
    {
        for(int i=0;i<N;i++)
        {
            scanf("%lf%lf",&s[i].p,&s[i].d);
        }
        sort(s,s+N,cmp);
        // 现在还有的油量 现在距离终点 已经行驶
        double NowGas =0,Nowdis = D,dis=0;
        double price=0;
        int can=1;
        if(s[0].d!=0){
            printf("The maximum travel distance = 0.00\n");     /*寸步难行*/
            continue;
        }
        for(int i=0;i<N;i++)
        {
            //printf("现在在加油站 : %d ,price = %.2lf , NowGas = %.2lf\n",i,price,NowGas);
            //当前在i加油站
            //下面没有加油站了
            // 要么加油到达终点
            // 要么加满走到哪算哪
            //当前站可以直接到终点
            if(s[i].d+NowGas*Da>=D)break;
            if(i==N-1)
            {
                if(s[i].d+Cmax*Da<D)
                {
                    dis = s[i].d+Cmax*Da;
                    can=0;
                    break;
                }
                else
                {
                    price += (1.0*(D-s[i].d-NowGas*Da)/Da)*s[i].p;;
                    break;
                }
            }
            else
            {
                double To = s[i].d+Cmax*Da;//最远可达
                double CheapPrice = s[i+1].d;
                int Cheapid = i+1;
                if(s[i+1].d>To)  /*后来意识到 中间路程就可能不可达*/
                {
                    can=0;
                    dis=s[i].d+Cmax*Da;
                    break;
                }
                for(int j=i+1;s[j].d<=To;j++)
                {
                    if(s[j].p<CheapPrice){
                        CheapPrice=s[j].p;
                        Cheapid = j;
                    }
                    if(s[j].p<s[i].p)break;
                    if(j+1>=N)break;
                }
                //printf("Cheapid is =%d\n",Cheapid);
                if(CheapPrice<s[i].p){
                //可达价格比当前站点便宜
                    //可以直接去便宜的站  不加油
                    if(s[i].d+NowGas*Da>=s[Cheapid].d)
                    {
                        NowGas-= 1.0*(s[Cheapid].d-s[i].d)/Da;
                        i=Cheapid-1;
                    }
                    else //要加油才能到达便宜的站 加恰好达到的油
                    {
                        price += (1.0*(s[Cheapid].d-s[i].d-NowGas*Da)/Da)*s[i].p;
                        NowGas=0;
                        i=Cheapid-1;
                    }
                }
                else{
                     //价格比当前站点贵 但是是最小的
                    //当前站点加满 或 当前站能到终点
                    if(s[i].d+Cmax*Da>=D)
                    {
                        price+= (1.0*(D-s[i].d-NowGas*Da)/Da)*s[i].p;
                        break;
                    }
                    else{
                        price +=(Cmax-NowGas)*s[i].p;
                        NowGas=Cmax;
                        NowGas -=(1.0*(s[Cheapid].d-s[i].d)/Da);
                        i=Cheapid-1;
                    }
                }

            }
        }

        if(can)printf("%.2lf\n",price);
        else printf("The maximum travel distance = %.2lf\n",dis);
    }
}

 

Windows 2000系统下载与全套镜像安装:从镜像校验到驱动兼容性实战指南 操作系统镜像文件是安装系统的核心载体,其完整性直接影响部署成败。哈希校验作为验证文件一致性的基础手段,能有效避免因镜像损坏导致的安装中断。对于已停止支持的操作系统,如Windows 2000,其镜像获取与安装更具挑战性,但它在工业控制、专用终端及怀旧技术研究中仍有不可替代的价值。通过理解镜像命名规则、服务包等级(如SP4)及引导方式,结合虚拟机或老硬件平台,可以顺利完成部署。同时,驱动兼容性是老系统运行的关键瓶颈,需针对性解决网卡、显卡等外设驱动问题。本文从镜像下载、校验到安装配置,系统梳理了Windows 阅读详情

相关推荐

绿标短网址app.10086.cn/xxxxx移动短网址缩短接口网址api调用php方式解析

绿标短网址app.10086.cn/xxxxx 移动网缩短接口网址api调用php方式解析 app.10086.cn是移动网站的接口,可以制作移动网等第三方官方网站域名的任意生成接口,由于是认证企业,可以再抖音 微信 qq等第三方渠道正常打开不拦截提示,第三方网址,头条文章等,效果非常号,这里记录下api接口,纯技术php生成,具体规则可以去抖音的开放平台去申请对应接口 。这里用我php模拟抓包获取方式 GET http://www.app10086cn.cn/?i=app.10068.cnHTTP/1.1

qq_20300095的博客 5907

PAT 甲级 1033  To Fill or Not to Fill

1033 To Fill or Not to Fill (25 point(s)) 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...

漫浸天空的雨色的备忘录~ 836

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 730

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

首先,先贴柳神的博客 https://www.liuchuo.net/ 这是地址 想要刷好PTA,强烈推荐柳神的博客,和算法笔记 文章目录题目原文Input Specification:Output Specification:Sample Input 1:Sample Output 1:Sample Input 2:Sample Output 2:题目大意**分析:贪心算法。***贪心思想:*代...

Huangpengyu123的博客 376

ENVI中Landsat8大气校正法实现地表温度精准反演

本文详细介绍了在ENVI软件中,利用大气校正法对Landsat8热红外数据进行地表温度反演的完整流程。该方法通过辐射定标、大气参数获取、发射率估算及温度转换四个核心步骤,精准剔除大气干扰,还原地表真实温度,是城市热岛效应监测、农业旱情分析等应用的关键技术。

weixin_29292535的博客 150

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

前程算法屋的博客 900

牛客oj 习题7.2 To Fill or Not to Fill(经典贪心)

这题和上一题相似,都是选出当前最佳步数,但策略要更加复杂。 我这里把加油站分成了两类: 第一类继承者:价钱比当前油价钱便宜或相等,离得最近。 第二类继承者:无第一类继承者的情况下,剩下的油都比第一类贵,从贵的中找出一个相对便宜的。 贪心策略: 1.先把所有加油站按距离排个序。 2.从中找出第一类继承者和第二类继承者(若无第一类)。 3.如果无第一类继承者且安全范围内到达终点,直接加上...

Iguodala的博客 659

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过来弥补参数大幅减少的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和五种模型,以满足不同的需求。

Limiiiing的博客 2975

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

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

星辰不问 195

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

KoboldCpp vs Ollama vs llama.cpp 全面对比(2026工程视角)

本文对比分析了KoboldCpp、Ollama和llama.cpp三大本地AI推理工具的核心差异。llama.cpp作为基础引擎性能最强但上手困难;KoboldCpp在其基础上增加了UI界面,适合娱乐创作;Ollama则提供最简化的模型管理和API服务。性能实测显示:llama.cpp>KoboldCpp>Ollama。选型建议:新手用Ollama快速入门,玩家选KoboldCpp获得交互体验,工程师用llama.cpp追求极致性能。三者定位清晰:性能极限、使用体验和开发效率各有所长。

刘一说的IT专栏 904

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

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

NHS6671的博客 320

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

【PAT甲级真题】- To Fill or Not to Fill (25)

有两种思路,贪心和桶桶的思路和代码比较简单我们直接开一个30000的桶,表示每公里的油费每输入一个结点,我们就把这个结点能够去到的最大距离之间的每个数组元素标上油费注意,如果其中遇到已经有标记的结点,显然应该取最小值然后从0加到目标距离就是答案其中如果有结点不可达直接输出否贪心的代码和思路比较复杂,判断比较多去下一个结点时,我们分三种情况讨论用油箱当中剩余的油就可以去的结点。

ppparaneciym的博客 881

efm32 入门.pdf

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

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

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

To fill or Not to Fill

2.如果当前加油站费用最低:就加满,计算加油费用和到达后剩余的油。1.每到达一个加油站就寻找下一个最优的加油站k,并计算转移到它的费用。(2)不够,加正好到达k的油,计算加油费用,到达k,油为0,(1)油够,转移费用为0,计算到达后剩余的油。实现每一次转移均花费最少,并累加到这个最少的费用。

qq_51499083的博客 4505

温度PID控制PLC程序

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

1033 To Fill or Not to Fill

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 way from time to time. Different gas station may give di..

haohulala的博客 356

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【PAT 1033】To Fill or Not to Fill

题目地址:http://www.patest.cn/contests/pat-a-practise/1033 所用算法:贪心算法 分析: 1. 既然油箱初始为空,那么想要最便宜的方案,到终点的时候,油箱也必须为空。 2. 每个地点的加油策略: 设当前所在位置为 A,则开始寻找下一个加油位置,设为 B,将输入的加油站的位置按照距离的远近进行排序,每次遍历一个加油站。一次性跑的最远的距离为

tianshilei1992的专栏 1536

1033 To Fill or Not to Fill

第一遍刷pat 题目意思 模拟题真是烦死了! 贪心思想吧 在当前站加满油,如果能开到比当前站便宜的加油站,就加刚刚好过去的油,如果不行的话,就当前先加满,再开到后续最便宜的那个加油站 测试点提示 测试点2 起点处没有加油站 测试点4 牛客网可测,大概可能是当前加满油就可以直接到目的地的那种情况 我的憨憨程序 (模拟题真的不想整理代码了) #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; struct st

weixin_42986599的博客 234

PAT 1033 To Fill or Not to Fill

原题链接:1033 To Fill or Not to Fill (25分) 关键词:贪心 题目: 从杭州出发去目的城市,路上有若干加油站,每个加油站的油价不同,你需要计算,到达目的地所花费的最少油钱是多少。

cwtnice的博客 255

贪心—To Fill or Not to fill

2.其次,寻找(current_location,current_location+最大里程]内油价最便宜的加油站。1.首先判断油箱加满时的最大里程能否支撑到下一个加油站。(只需判断相邻的油站距离是否大于加满油的最大里程即可)2.1 若这个最便宜的油价甚至比当前加油站的更便宜,则只需将油箱加到足够到该加油站的油量即可,不需要多加。2.2 若这个最便宜的油价比当前加油站的还要贵。那么就在当前的加油站加满油。符合最优子结构、无后效性、重复子问题三个条件,因此可以使用贪心求解。

admin的博客 770

1033 to fill or not to fill

贪心算法 注意两点: 1、sum用double类型 2、第二个测试点是起点没有加油站的情况 AC代码 1 #include <vector> 2 #include <cstdio> 3 #include <algorithm> 4 #include <map> 5 using namespace s...

diyong2996的博客 154

PTA To Fill or Not to Fill

贪心

ACoder 299
上一篇: FZU-2195 检查站点
下一篇: PAT (Advanced Level) Practice 1132 Cut Integer
矢澤 年
博客等级 码龄10年 3粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值