洛咕

题意:一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离 \(D_1\)、汽车油箱的容量 \(C\)(以升为单位)、每升汽油能行驶的距离 \(D_2\)、出发点每升汽油价格\(P\)和沿途油站数 \(N\)(\(N\) 可以为零),油站 \(i\) 离出发点的距离 \(D_i\)、每升汽油价格 \(P_i\)(\(i=1,2,…,N\))。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出 No Solution

分析:贪心策略。从当前加油站出发,如果加油能到达一个油价比当前加油站低的加油站,那当前加油就只要保证刚好能够到达那个加油站即可(贪心策略一)。如果在当前加油站即使加满油也无法到达一个油价比当前加油站低的加油站,那么就加满油,下一个到达能到达的加油站里面油价最低的(贪心策略二)。如果加满油无法到达任何一个加油站就是无法到达目的地。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
char ch=getchar();int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int mod=100000000;
const int N=1e5+5;
const int M=5e6+5;
double dis[10],pri[10];
int main(){
double d1,c,d2,p;int n;
cin>>d1>>c>>d2>>p>>n;
for(int i=1;i<=n;++i){
cin>>dis[i]>>pri[i];
}
dis[0]=0;pri[0]=p;//起点也看做一个加油站
double maxn=c*d2; //加满油最多能走的路程
int now_sta=0;double now_dis=0,ans=0,now_c=0;
//now_sta当前到达的加油站,now_dis当前走过的距离,now_c当前剩余油量能走的路程
while(1){
now_dis=dis[now_sta];
int bj=0,j=-1;
for(int i=now_sta+1;i<=n&&dis[i]-now_dis<=maxn;i++){
if(pri[i]<pri[now_sta]){//贪心策略一
ans+=((dis[i]-now_dis-now_c)/d2)*pri[now_sta];
now_c=0;
now_sta=i;
bj=1;
break;
}
else if(j==-1||pri[i]<pri[j])j=i;//贪心策略二寻找价格最低加油站
}
if(bj)continue;
if(d1-dis[now_sta]<=maxn){//已经可以到达目的地
ans+=((d1-dis[now_sta]-now_c)/d2)*pri[now_sta];
printf("%.2lf\n",ans);
break;
}
if(j==-1){
cout<<"No Solution";
break;
}
else{//贪心策略二更新状态
ans+=c*pri[now_sta];
now_c+=(maxn-dis[j]+now_dis);
now_sta=j;
continue;
}
}
return 0;
}

[NOIP1999 提高组] 旅行家的预算的更多相关文章

  1. NOIP1999提高组 题解报告

    T1 导弹拦截 题目大意:依次有\(n\) (\(n \le 10^5\))枚导弹,一套导弹拦截系统只能拦截一系列高度递减的导弹(一套系统拦截的弹道不一定相邻).求一套系统最多能拦截多少导弹,以及最少 ...

  2. [NOIP1999] 提高组 洛谷P1016 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  3. [NOIP1999] 提高组 洛谷P1014 Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … ...

  4. [NOIP2006] 提高组 洛谷P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  5. 旅行家的预算(NOIP1999&水题测试2017082301)

    题目链接:旅行家的预算 这题还可以,不算太水. 这题贪心即可. 我们采取如下动作: 如果在装满油的情况下能到达的范围内,没有加油站,则无解. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价 ...

  6. codevs 1046 旅行家的预算

    传送门 1046 旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold题解   题目描述 Des ...

  7. $NOIp$提高组历年题目复习

    写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...

  8. NOIP 2015提高组复赛

    神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第 ...

  9. 洛谷 P2678 & [NOIP2015提高组] 跳石头

    题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...

  10. 【二分查找】 跳石头NOIP2015提高组 D2T1

    [二分查找]跳石头NOIP2015提高组 D2T1 >>>>题目 [题目描述] 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石 ...

随机推荐

  1. C++标准库string学习笔记

    string概述 作为c++语言用作字符串处理的标准库,和Python字符串类型有较多相似之处.可以使用'='进行赋值,"=="来比较,"+"进行拼接. 构造函 ...

  2. 第二天python 基础

    一.Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分 ...

  3. IO 多路复用 select/poll/epoll ---> Reactor ---> Netty

    什么是内核态和用户态 https://blog.csdn.net/qq_41709234/article/details/124320482 参考:https://www.cnblogs.com/lo ...

  4. FMC子卡设计资料原理图:FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡

    FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡 一.产品概述 ADRV9002 是一款高性能.高线性度.高动态范围收发器,旨在针对性能与功耗系统进行优化.该设备是可配置的,非常适合要 ...

  5. VUE学习-插槽

    插槽 匿名插槽 子组件设置匿名插槽 <script type="text/x-template" id="custom-comp"> <div ...

  6. 寒假acm训练第三周

    这个题就是简单的数学思维 如果这个数组里全部都是10的倍数那直接计数达到n就直接出0 如果有其它不是10的倍数那找出最小的直接减去就可以了 下面就是代码 #include<iostream> ...

  7. minio对象存储集群安装

    环境:centos7.6 .两台服务器部署4个节点集群 minio简介: MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于 ...

  8. 创建异步倒计时触发Task

    https://www.cnblogs.com/shanfeng1000/p/13402152.html //Task关闭 CancellationTokenSource cancel = new C ...

  9. version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference

    I have installed IC618 latest version. But, after installation when I fire virtuoso I see following ...

  10. php functions 生成唯一码

    <?php /** * 微擎密码生成 * */ function we7password($passwordinput, $salt, $authkey) { $passwordinput = ...