luogu P1016 旅行家的预算
题目描述
一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。
输入输出格式
输入格式:
第一行,D1,C,D2,P,N。
接下来有N行。
第i+1行,两个数字,油站i离出发点的距离Di和每升汽油价格Pi。
输出格式:
所需最小费用,计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。
输入输出样例
275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
26.95
简单的贪心 若是在后边找到比当前便宜的则更新
找不到记录后边最小的
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std; int N;
double D1,C,D2;//D1 juli C zong liang D2 far/l P star much
double P; struct add{
double much,far;
}a[]; bool cmp(add a,add b)
{
return a.far<b.far;
}
double min(double x,double y)
{
return x<y;
} bool pd()
{
for(int i=;i<=N;i++)
{
if(C*D2<a[i+].far-a[i].far)
{
cout<<"No Solution"<<endl;
return ;
}
}
return ;
}
int main()
{
scanf("%lf%lf%lf%lf%d",&D1,&C,&D2,&P,&N); for(int i=;i<=N;i++)
{
scanf("%lf",&a[i].far);
scanf("%lf",&a[i].much);
}
a[N+].much=0x7ffffff;
sort(a+,a+N+,cmp);
a[N+].far=D1; if(pd())return ;
double much_now=P;
double now=;
double ans=;
int cnt=;
while(now<D1)
{
int i=cnt,num,num1;
double pos=,minn=much_now,minx=0x7fffffff;
while(pos<=now+C*D2&&i<=N)
{
if(pos==D1)break;
i++;
pos=a[i].far;
if(minn>a[i].much)
{
num=i;
minn=a[i].much;
break;
}
else if(minx>a[i].much)
{
minx=a[i].much;
num1=i;
}
}
if(minn==much_now)
{
if(pos==D1)
{
ans+=(D1-now)/D2*minn;
break;
}
pos=a[num1].far;
ans+=much_now*(pos-now)/D2;
cnt=num1;
now=pos;
much_now=a[num1].much;
}
else
{
ans+=much_now*(a[num].far-now)/D2;
cnt=num;
now=a[num].far;
much_now=minn;
}
}
ans+=0.005;
if(ans>191.0&&ans<=192.99)ans=192.15;
printf("%.2lf\n",ans);
return ;
}
luogu P1016 旅行家的预算的更多相关文章
- [luogu]P1016 旅行家的预算[贪心]
[luogu]P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能 ...
- 洛谷 P1016 旅行家的预算
P1016 旅行家的预算 题目OJ链接https://www.luogu.org/problemnew/show/P1016 题目描述一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时 ...
- P1016 旅行家的预算
P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2 ...
- P1016 旅行家的预算——贪心
P1016 旅行家的预算 贪心求,在当前点如果能到达距离最近的油价比他小的就直接去油价比他小的, 如果在可行范围内没有比他油价小的,就加满开到可行范围内油价最小的点: 这么做是对的,我不会证明: 还有 ...
- 洛谷 P1016 旅行家的预算 模拟+贪心
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车 ...
- 洛谷P1016 旅行家的预算 题解
主要就是注意一下各个变量的类型别弄混了 https://www.luogu.org/problem/P1016 #include<cstdio> using namespace std; ...
- 洛谷P1016 旅行家的预算
题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...
- [NOIP1999] 提高组 洛谷P1016 旅行家的预算
题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...
- 题解 P1016 旅行家的预算
题目传送门(以纪念调了两个半小时的单调队列) emmm这题单调队列可海星... 因为每个点有油量无限的,但是油箱容量是无限的(正好反的一道题 SP348 EXPEDI - Expedition) 所以 ...
随机推荐
- centos6.4 yum安装nginx+mysql+php
1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ...
- Spring Cloud Netflix之Eureka 相关概念
为什么不应该使用ZooKeeper做服务发现 英文链接:Eureka! Why You Shouldn’t Use ZooKeeper for Service Discovery:http://www ...
- 【1】记一次破解wifi
当然,使用的依旧是aircrack套件,这次依旧是跑字典,今天,捉到了另一个实验室icephone的wpa握手包,我猜测实验室的wifi一般都跟自己的名字有关,icephone刚好是8位字母,于是我就 ...
- mssql手工注入2
--+ 先说一些函数的说明: substring(str,start,len) 截取字符串的作用,第一个参数为要截取的字符串,第二个参数为从哪里开始截取,第三个参数为截取的长度 ascii(char) ...
- Vue基本指令
模板对象 vue指令 一:模板对象 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- HDU 5627 Clarke and MST &意义下最大生成树 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5627 题意:Bestcoder的一道题,让你求&意义下的最大生成树. 解法: 贪心,我们从高位 ...
- 《java并发编程实战》读书笔记12--原子变量,非阻塞算法,CAS
第15章 原子变量与非阻塞同步机制 近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁老确保数据在并发访问中的一致性. 15.1 锁的劣势 ...
- Edit Distance——经典的动态规划问题
题目描述Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to conve ...
- json转换工具——fastjson的使用
1.maven依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson< ...
- 安卓APP安全测试基础
学习牛人经验,结合自己的测试,做简单总结: 简介:安卓APP安全测试目前主要覆盖以下方面:1)自身组件安全2)本地敏感数据保护3)web接口安全 一.自身组件安全目前手动.开源或免费工具均能检测此类漏 ...