题目链接:旅行家的预算

这题还可以,不算太水。

这题贪心即可。

我们采取如下动作:

  1. 如果在装满油的情况下能到达的范围内,没有加油站,则无解。
  2. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价比当前高,那就装满油再走。
  3. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价比当前低,我们使油够到达那个加油站即可,如果当前的油比需要的多,我们分两种情况考虑:第一,这个最低油价比上一个加油的站价格高,那么我们就直接过去;第二,这个最低油价比上一站油价低,那么我们把多余的油退回上一个加油站(没错,就是有这种操作)。
  4. 如果能到达终点,我们依然要考虑两种情况:第一,就是最低油价比当前站油价低,那就执行3;第二,如果最低油价比当前站油价高,那就直接过去,并判断油是否多余,多余就退。

    有了这几点,我们就可以写出程序了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int reachable=1;
double d1,c,d2,P;
int n;
scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&P,&n);
double d[n+2],p[n+2];
double ans=0.0;
double liter=0.0; //1
int laststop=0; //2
d[n+1]=d1,p[n+1]=0; //3
d[0]=0,p[0]=P;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&d[i],&p[i]);
}
double maxgo=c*d2; //4
for(int i=0;i<n+1;){
double min=1000000000.0;
int x=-1;
int ok=0;
for(int j=i+1;j<=n+1&&d[j]-d[i]<=maxgo;j++){//5
if(j==n+1){
ok=1;
}else if(p[j]<min){
min=p[j];
x=j;
}
}
if(ok==1&&min>=p[i]){
double need=(d[n+1]-d[i])/d2;
if(liter<need){
ans+=(need-liter)*p[i];
}else{
ans-=(need-liter)*p[laststop];
}
liter=0;
laststop=i;
i=n+1;
}else if(x>=0){
if(min>p[i]){
double need=c-liter;
ans+=need*p[i];
liter=c-(d[x]-d[i])/d2;
}else{
double need=(d[x]-d[i])/d2;
if(need>liter){
ans+=(need-liter)*p[i];
liter=0;
}else{
if(p[x]<p[laststop]){
ans-=(need-liter)*p[laststop];
liter=0;
}else{
liter-=need;
}
}
}
laststop=i;
i=x;
}else{
reachable=0;
break;
}
}
if(reachable){
printf("%.2f",ans);
}else{
printf("No Solution");
}
return 0;
}

就提五处:

1处:保存当前油量

2处:保存上一站

3处:我们这里视起点为第0站,终点为第n+1站。

4处:计算满油能跑的路程

5处:求最小值

旅行家的预算(NOIP1999&水题测试2017082301)的更多相关文章

  1. NOIP水题测试(2017082301)

    你们从题目也能看出来今天的题是很水的. 前几期答案还没出,效率有点低,谅解,谅解. 今天的答案应该会出的很快. 下面给题目: 时间限制:3小时 题目一:旅行家的预算 题目二:进制转换 题目三:乘积最大 ...

  2. 失踪的7(P1590&NOIP水题测试(2017082301))

    题目链接:失踪的7 水题,不解释. #include<bits/stdc++.h> using namespace std; int main(){ int t; scanf(" ...

  3. 子数整数(P1151&NOIP水题测试(2017082301))

    题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...

  4. 进制转换(NOIP2000&NOIP水题测试(2017082301))

    题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...

  5. 求先序排列(NOIP2001&NOIP水题测试(2017082301))

    题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...

  6. 乘积最大(NOIP2000&NOIP水题测试(2017082301))

    题目链接:乘积最大 这道题显然是道区间dp. 难度不是很大. 思路也很清晰. 我们设计一个三维状态. ans[l][r][k] 这里表示在闭区间[l,r]上操作k次的最大值. 操作就是加乘号. 转移也 ...

  7. NOIP水题测试(2017082401)

    哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...

  8. NOIP水题测试(2017082501)

    日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...

  9. 栈(NOIP2003&水题测试2017082501)

    题目链接:栈 这题不难. 我们看一下,其实可以发现是卡特兰数. 不知道卡特兰数?没事,给你简单讲一下. 卡特兰数的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+-+f(n-2)*f( ...

随机推荐

  1. 二叉树中和为某一值的路径(python)

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  2. Linux下查看编辑二进制文件:hexedit神器

    1.如果没有hexedit安装hexedit:2.打开终端输入hexedit filename;3.打开即可用键盘输入字符,用方向键移动,ctrl+w保存,ctrl+x退出:4.详细用法 man he ...

  3. tf.trainable_variables()

    https://blog.csdn.net/shwan_ma/article/details/78879620 一般来说,打印tensorflow变量的函数有两个:tf.trainable_varia ...

  4. jQuery之禁止Get请求缓存

    如果两次Get请求的URL完全一样,则IE浏览器会调用上次缓存的结果,不会发起新的Http请求. 解决办法:在URL最后面加上时间戳. jQuery全局设置禁止缓存 $.ajaxSetup({ cac ...

  5. TOJ 2778 数据结构练习题――分油问题(广搜和哈希)

    描述 设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油.初始时,第一个油桶盛满油,第二.三个油桶为空,在某一个油桶上分出targ公升油. 输入 输入包含多组测试数据.每组数据包含一行.分别x ...

  6. 在linux 中启动anaconda

    anaconda-navigator   $ source ~/anaconda3/bin/activate root ###在bin  目录下打开终端 敲 ./activate root   $ a ...

  7. python使用elasticsearch模块操作elasticsearch

    1.创建索引 命令如下 from elasticsearch import Elasticsearch es = Elasticsearch([{"host":"10.8 ...

  8. js文字展示各种滚动效果

    js文字展示各种滚动效果:http://www.dowebok.com/demo/188/

  9. Incorrect Invoice Ref.

    IF_EX_ACC_DOCUMENT~CHANGE LOOP AT c_accit ASSIGNING <wa_accit> WHERE rebzg eq 'V'. <wa_acci ...

  10. MVC学习(四)几种分页的实现(1)

     这里,我使用的是Code-First,MVC3. 我们在数据库里建一个表MyTestPages,只有一个整型字段Id. 在写一个Model类MyTestPages,代码如下 public class ...