蓝桥杯 算法训练 ALGO-15 旅行家的预算
接下来N行,每行两个实数Di、Pi。
102.0 2.9
220.0 2.2
将起点想象成第 0 个加油站,终点想象成 N+1 个加油站
第 0 个加油站距离起点的距离为 0,第 N+1 加油站距离起点的距离为 D1
第 0 个加油站的价格为 P,第 N+1 加油站的价格为 0
根据油箱容量 C 和每升汽油能能行驶的距离 D2 可以计算出油箱加满油可以行驶的最大距离 maxDis
无解:(在输入时就判断,尽快找出无解情况)
如果两个加油站的距离大于加满油可以行驶的最大距离,那么无解
有解:
从当前位置的下一个加油站寻找距离最近且便宜的加油站:
1. 如果能找到了
(1)如果能一次加油到达,那么加到刚好能到达便宜的加油站即可
(2)如果一次不能到达,那么先将油箱加满,到达行驶最大距离之前的那个加油站,再加到刚好行驶到的便宜那个加油站
2. 如果没找到,则加满油,行驶到最大距离之前的那个加油站,继续寻找
注意:终点的加油站价格为 0,所以最后一次加油加到刚好到达终点即可
#include<iostream>
#include<cstdio>
using namespace std; #define MAX_NUM 1001 int main()
{
int N;
double D1, C, D2, P;
scanf("%lf%lf%lf%lf%d", &D1, &C, &D2, &P, &N); // double * distance = new double[N+5]; //加油站i到起点的距离
// double * price = new double[N+5]; //油的价格
double distance[MAX_NUM];
double price[MAX_NUM]; distance[] = ; //记录第i个点离出发点的距离
price[] = P; //起点的油价
distance[N+] = D1; //终点为最后一个加油站
price[N+] = ; //终点价格 double total = ; //费用
double surplus=; //到第i个加油站的时候的剩余油量
double maxDis = C * D2; //加满油行使的最大距离
bool flag = true; //是否有解,默认有解 for (int i = ;i <= N; i++)
{
scanf("%lf%lf", &distance[i], &price[i]);
if (distance[i] - distance[i-] > maxDis) //如果两个加油站的距离大于加满油可以行使的距离 ,则无解
{
flag = false; //无解
}
} if(!flag) //无解
{
printf("No Solution\n");
return ;
} /*
i:当前加油站的编号
j:下一个比自己便宜的加油站的编号
*/
for (int i = , j; i <= N; i = j) //到达j之后,将j赋值给i,重新循环,知道到达终点
{
for (j = i + ; j <= N + ; j++) //从i的下一个开始找比它便宜的加油站
{
if (distance[j] - distance[i] > maxDis) //如果不能行使到比它便宜的加油站
{
j--; //则先行驶到便加满油后能驶得最大距离之前的加油站
break;
}
if (price[j] <= price[i]) //找比现在所在的加油站便宜的加油站
{
break;
}
} /*
从当前位置的下一个加油站寻找距离最近且便宜的加油站:
1 如果能找到了
(1)如果能一次加油到达,那么加到刚好能到达便宜的加油站即可
(2)如果一次不能到达,那么先将油箱加满,到达行驶最大距离之前的那个加油站,再加到刚好行驶到的便宜那个加油站
2 如果没找到,则加满油,行驶到最大距离之前的那个加油站,继续寻找
*/ if (price[j] <= price[i]) //属于(1)
{
total += ((distance[j] - distance[i]) / D2 - surplus) * price[i]; //加到可以刚好行使到 j 点
surplus = ; //剩余油量
}
else //属于(2)或 2
{
total += (C - surplus) * price[i]; //油箱加满
surplus = C - (distance[j] - distance[i]) / D2; //到j点时剩余油量
}
} printf("%.2lf\n", total); return ;
}
蓝桥杯 算法训练 ALGO-15 旅行家的预算的更多相关文章
- Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算
问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...
- Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...
- Java实现蓝桥杯 算法训练 大等于n的最小完全平方数
试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...
- 蓝桥杯 算法训练 ALGO-116 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- 蓝桥杯 算法训练 ALGO-34 纪念品分组
算法训练 纪念品分组 时间限制:1.0s 内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购 ...
- Java实现 蓝桥杯 算法训练 画图(暴力)
试题 算法训练 画图 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色. 下图给出了一个画了两个矩 ...
- Java实现 蓝桥杯 算法训练 Lift and Throw
试题 算法训练 Lift and Throw 问题描述 给定一条标有整点(1, 2, 3, -)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这 ...
- Java实现 蓝桥杯 算法训练 Airport Configuration
试题 算法训练 Airport Configuration 问题描述 ACM机场是一个本地机场,对于大多数人来说,机场不是他们的终点或起点,而是中转站.机场有一个规划图.到达的大门在机场的北边(相当于 ...
随机推荐
- 基于开源库jsoncpp的json字符串解析
json(JavaScript Object Notation)是一种轻量级高效数据交换格式.相比于XML,其更加简洁,解析更加方便.在实习期间,我负责的程序模块,多次使用到json进行数据传输.由于 ...
- java接口调试思想
对于接口调试的理解:最近多次参与接口调试工作,一般情况都是获取对方接口文档,文档中有加密验证方式,根据加密验证方式开发,调用对应的接口.可以不可以简化这个流程那,至少减少一方的工作量.1.减少调用方法 ...
- ActiveMQ 性能调优
本章重点 学习普通的性能调优技巧 怎么优化生产者和消费者 调优实例 简介 ActiveMQ 的性能高度依赖于多种不同的因素,包括:网络代理拓扑架构,传输层,底层网络的服务质量和速度,硬件,操作系统和 ...
- 20165332《Java程序设计》第2周学习总结
<Java程序设计>第2周学习总结 2-3章学习内容 第二章 标识符(名字) 关键字 int class 基本数据类型 逻辑类型 整数类型 字符类型 浮点类型 各类型相互转换 --低级别给 ...
- HostFileChangeMonitor
HostFileChangeMonitor 类是 FileChangeMonitor 类型的具体实现. 此类密封,因此无法扩展. 如果要使用现有缓存实现以及监视更改的文件和目录,此类非常有用. 对于每 ...
- docker建立和共享文件(服务器和docker之间的共享)
建立序列号:sudo docker run -it domimiek/deep-base /bin/bash 回撤后会出现一个序列号(记住) 开始:sudo docker start 序列号 当 ...
- 【scala】定义变量和函数
1.定义变量 Scala的变量分为两种,val和var. val跟java的final变量类似,一旦初始化就不能被重新赋值. var类似于java的非final变量,在整个生命周期内var可以被重新赋 ...
- 自定义音频条形图--p52
package com.zzw.qunyingzhuan2; import android.content.Context; import android.graphics.Canvas; impor ...
- Python基础学习(第7天)
第6课 1.循环对象:包括一个next方法,这个方法的目的是进行到下一个结果,结束后抛出StopInteration异常: 当循环结构如for循环调用一个循环对象时,每次循环的时候都会调用next方法 ...
- 剑指offer--24.树的子结构
时间限制:1秒 空间限制:32768K 热度指数:407165 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) class Solution ...