1033. To Fill or Not to Fill (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1033
题目:
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 carefully
design the cheapest route to go.
Input Specification:
Each input file contains one test case. For each case, the first line contains 4 positive numbers: Cmax (<= 100), the maximum capacity of the tank; D (<=30000), the distance between Hangzhou and the destination
city; Davg (<=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: Pi,
the unit gas price, and Di (<=D), the distance between this station and Hangzhou, for i=1,...N. All the numbers in a line are separated by a space.
Output Specification:
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 1:
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
Sample Output 1:
749.17
Sample Input 2:
50 1300 12 2
7.10 0
7.00 600
Sample Output 2:
The maximum travel distance = 1200.00
分析:
把不能到达和能到达分开讨论,特别要注意不能到达分为(1),中间距离大于满邮箱的行驶距离(2),起点没有加油站。
在其余的情况的都是能到达终点的,那么选择油费最小的策略就是:在当前加油站到满油箱行驶距离中的加油站中,假设有油价比当前油价小的S加油站,则仅仅加油到满足S加油站的地方。然后从S加油站继续寻找。假设没有找到比当前油站油价小的。则在当前加油站加满油。行驶到下一油站继续寻找。
AC代码:
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
struct Station{
double price;
double location;
bool operator <(const Station &A)const{
return location < A.location;
}
};
vector<Station>V;
int main(void){
//freopen("F://Temp/input.txt", "r", stdin);
int C, D, dis_per, N;
scanf("%d%d%d%d", &C, &D, &dis_per, &N);
for (int i = 0; i < N; i++){
Station tmp;
scanf("%lf %lf", &tmp.price, &tmp.location);
V.push_back(tmp);
}
Station tmp;
tmp.location = D;
tmp.price = 0;
V.push_back(tmp);//join the Destination to the Station ,As the price = 0;
sort(V.begin(), V.end());
double distance1time = C * dis_per;//满油箱行驶的距离
for (int i = 0; i <V.size() - 1; i++){
if (V[0].location > 0){//假设起点没有加油站,则最远距离就是0。这是一个測试点
printf("The maximum travel distance = 0.00\n");
return 0;
}
if (V[i + 1].location - V[i].location > distance1time){//假设两个加油站的距离大于满油箱的距离
double max;
max = V[i].location + distance1time;
printf("The maximum travel distance = %.2lf\n", max);
return 0;
}
}//The situation that the car can't reach the Destination.
double remain, money, distance;
remain = 0; money = 0; distance = 0;
int now_Station = 0, next_Station;
while (distance < D){
next_Station = -1;
for (int i = now_Station + 1; i < V.size(); i++){//寻找到下一个比当前加油站油价小的加油站
if (V[i].location - V[now_Station].location >distance1time)break;
else if (V[i].price <= V[now_Station].price){
next_Station = i;
break;
}
}
if (next_Station != -1){//找到了更廉价的加油站
double dis_tmp = V[next_Station].location - V[now_Station].location;
distance = V[next_Station].location;
if (remain > dis_tmp / dis_per){//假设当前的油够开到那个更廉价的加油站,则不用加油
remain = remain - dis_tmp / dis_per;
money = money;
}//have enough gas
else{//假设油不够开到更廉价的加油站。则加到能刚好开到那个加油站的油就好
money += (dis_tmp / dis_per - remain)* V[now_Station].price;
remain = 0;
}//gas is not enough
now_Station = next_Station;
}//find the cheaper station
else{//假设没有找到,即当前加油站是能行驶到的路程中油价最小的加油站
double dis_tmp = V[now_Station + 1].location - V[now_Station].location;
distance = V[now_Station + 1].location;
money += (C - remain) * V[now_Station].price;//那么就把油箱加满
remain = C - dis_tmp / dis_per;
now_Station++;
}//can't find the cheaper one ,so full the tank;
}//while
printf("%.2lf\n", money);
return 0;
}
截图:
——Apie陈小旭
1033. To Fill or Not to Fill (25)的更多相关文章
- 【贪心】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, Gu ...
- 1033 To Fill or Not to Fill (25 分)
1033 To Fill or Not to Fill (25 分) With highways available, driving a car from Hangzhou to any other ...
- PAT 甲级 1033 To Fill or Not to Fill (25 分)(贪心,误以为动态规划,忽视了油量问题)*
1033 To Fill or Not to Fill (25 分) With highways available, driving a car from Hangzhou to any oth ...
- PAT 1033 To Fill or Not to Fill[dp]
1033 To Fill or Not to Fill(25 分) With highways available, driving a car from Hangzhou to any other ...
- pat1033. To Fill or Not to Fill (25)
1033. To Fill or Not to Fill (25) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ZHANG, Gu ...
- 1033 To Fill or Not to Fill
PAT A 1033 To Fill or Not to Fill With highways available, driving a car from Hangzhou to any other ...
- PAT甲级1033. To Fill or Not to Fill
PAT甲级1033. To Fill or Not to Fill 题意: 有了高速公路,从杭州到任何其他城市开车很容易.但由于一辆汽车的坦克容量有限,我们不得不在不时地找到加油站.不同的加油站可能会 ...
- PAT甲级——1033 To Fill or Not to Fill
1033 To Fill or Not to Fill With highways available, driving a car from Hangzhou to any other city i ...
- PAT_A1033#To Fill or Not to Fill
Source: PAT A1033 To Fill or Not to Fill (25 分) Description: With highways available, driving a car ...
随机推荐
- Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
首先,需要再次声明的是:struts是web层的框架.在介绍struts的第一篇文章就已经有了论述,如果不使用struts框架同样可以进行开发,但是需要在Servlet里面写大量的“if……else… ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- 中国三种3G网络频段
首先看中国三家运营商所发布的频率标准: 中国移动TD-SCDMA(TDD): • 核心频段:1880~1920MHz,2010~2025MHz • 补充频率:2300~2400MHz 中国联通WCDM ...
- poj 2356 Find a multiple(鸽巢原理)
Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...
- MPreview.js
Word,PPT 文档预览组件(图片预览组件) 移动端请移步 MPreview.mobile Demo参考 http://demo.webjyh.com/MPreview/ 特此说明 此插件是我在项目 ...
- 【数学三角恒等变幻】【HDU2552】三足鼎立
Problem Description MCA山中人才辈出,洞悉外界战火纷纷,山中各路豪杰决定出山拯救百姓于水火,曾以题数扫全场的威士忌,曾经高数九十九的天外来客,曾以一剑铸十年的亦纷菲,歃血为盟,盘 ...
- Windows下安装Memcache
安装步骤的时候只需要做两步: 第一步:安装memcache.exe 服务. 第二步:安装php_memcache.dll扩展,让php支持memcache. 1.安装 memcache.exe 服务 ...
- 【.NetRemoting-3】2015.09.18
[Remoting程序的基本实现] [一]服务程序集 [1]服务对象必须要求继承[MBR,MarshalByRefObject] [二]服务端应用程序 [1]注册通道 [两种类型的通道] [A]发送请 ...
- 工具使用 eclipse the user operation is waiting for Building Working to be completed。
问题定位: 在使用 IDE开发时,学习一个新事物如语言,框架,出现错误时暂时无法判断是新写的代码错还是IDE使用错: 则编写简单的未使用该技术的test.java ,运行后还有异常出现,则不是代码问题 ...
- php 记住密码自动登录
当我们登录网站管理后台的时候,会有提示说记住登录状态,记住我等这样的提示,这个选项有什么用呢?如果选中了记登录状态后,下次在浏览这个网站后 台时就不用在填写用户名和密码了,在去登录了.下面写了一小代码 ...