Time Limit: 1 second

Memory Limit: 2 MB

问题描述

一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车装

一次油是过不了沙漠的。因此司机必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问

司机如何建立这些贮油点?每一贮油点应存多少汽油,才能使卡车以消耗最少汽油的代价通过沙漠?

编程计算及打印建立的贮油点序号,各贮油点距沙漠边沿出发的距离以及存油量。

No. distance(k.m.) oil(litre)

1 ×× ××

2 ×× ××

3 ×× ××



Input

Output

Sample Input

Sample Output

输出的距离和油量两部分场宽20,保留小数点后10位

No. Distance oil

0 0.0000000000 3836.4968364968

1 22.4331224331 3500.0000000000

2 60.8946608947 3000.0000000000

3 106.3492063492 2500.0000000000

4 161.9047619048 2000.0000000000

5 233.3333333333 1500.0000000000

6 333.3333333333 1000.0000000000

7 500.0000000000 500.0000000000

8 1000.0000000000 0.0000000000

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=a302

【题解】



从倒数第二个贮油点考虑;

因为我们从样例已经知道了d[8]=500,oil[8]=500;

这就表示我们到达这第8个贮油点的时候,刚好油耗完了;然后第8个点刚好有500L的油,则再加上去就可以在终点处耗完所有的油且到达终点了;(严格意义来说是,我们到第8个贮油点的时候,车上还有油,但不是恰好500L,要加上第8个贮油点的油才是500L,这个情况可以看成是我们把车上剩余的油全部倒在第8个贮油点,然后第8个贮油点就为500L的油了,然后再把500L的油加到车上。。。没错就是这样,我不是在卖萌、)

那么我们在第7个贮油点要多少油呢?显然我们得让贮油点7的储油量大于500;因为我们在第7和第8个贮油点之间来回走的时候就已经耗掉一点油了,恰好500升是肯定不够的;再考虑一下来回走的过程;则我们肯定最少要1000升的油;



如图所示,我们从第7个点满载两次出去到第8个点,然后再空载一次回来(红线);

显然。我们在1000升油中有500升是要放在第8个点的;

则另外500升就是在路途中消耗掉的;即从7->8然后从8->7再从7->8;也即3*s;

这样3*s=500升;则s=500/3;

这样我们就确定了贮油点7到贮油点8的距离;

可以想见;其实我们不一定要1000升的汽油放在贮油点7;

实际上800升也可以;

那样有500升是运到了贮油点8;则300升用于路上的消耗;

则3*s=300;则s=100;但是这样并不利于后面的递推;所以我们取个整数500;即第7个贮油点放1000升的油;

我再模拟下第6个点到第7个点的过程;

因为第7个点要1000升的油:

所以第6个点我们就假设要1500升的油;

还是一样;



我们因为路上会有损耗,所以不可能只在第6个点贮1000升的油;

选择1500是一个合理的数字;

则我们要往第7个点运3次油;如上图;

可以看到一共有5个箭头;则这5个箭头是在路上消耗掉的油;

则5*s=(1500-1000)则s=100;

所以第6个贮油点和第7个贮油点之间的距离为100km;



以此类推;

我们到了起点前的一个点d[1]的时候;

通过样例看到距离起点d[1]= 22.4331224331;oil[1]=3500;

则要从起点0运3500升的油在1号点贮存,需要在0号节点放多余3500升的油才行。

那么要多少油呢;

显然3500升;运7次是不够的;因为路上会有损耗;则需要运八次;

如下图;



则耗损的油量为d[1]*15==336.4968364968

然后再加上需要放在1号点的3500升油;

咋1号点需要放3836.4968364968油;

(每次从0到1后,只留回来的油量,剩余的全都放在1号贮油点;当然最后一次(即第8次从0到1的时候,就不用再放下油了,此时车上的油加上1号贮油点在前7次存下的油量恰好为3500,也就是说第8次到1号贮油点的时候1号贮油点还不是3500升油,要加上车上剩余的油才是3500升);



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 20;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
double d[MAXN];
double oil[MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
d[1] = 1000;oil[1] = 0;
d[2] = 500;oil[2] = 500;
int i=2;
double now = 500.0;
while (true)
{
oil[i+1] = oil[i]+500;
double dis = 2*i-1;
dis = 500.0/dis;
if (now-dis<0)
break;
i++;
now-=dis;
d[i] = now;
}
double dis = 2*i-1;
i++;
d[i] = 0;oil[i] = oil[i-1]+dis*now;
puts("No. Distance oil");
rep2(j,i,1)
printf("%d%20.10lf%20.10lf\n",i-j,d[j],oil[j]);
return 0;
}

【a302】&&【9306】贮油点问题的更多相关文章

  1. 贮油点问题(C++)

    贮油点问题…..一道送命系列的递推… 描述 Description 一辆重型卡车欲穿过S公里的沙漠,卡车耗汽油为1升/公里,卡车总载油能力为W公升.显然卡车装一次油是过不了沙漠的.因此司机必须设法在沿 ...

  2. c语言-递推算法1

    递推算法之一:倒推法 1.一般分析思路: if 求解初始条件F1 then begin { 倒推 } 由题意(或递推关系)确定最终结果Fn; 求出倒推关系式Fi-1 =G(Fi ); i=n; { 从 ...

  3. 一些最常见的SNMP的OID自动翻译成zabbix数字进行表示(华为9306)

    转载自:https://blog.51cto.com/davidbj/1173954 随着Zabbix 2.0版本的发布,很多企业开始用zabbix来代替之前的Nagio.Cacti等其它监控软件.至 ...

  4. Dell XPS 13 9306安装 macOS 10.12.6

    一直在考虑买一个手上的本,轻薄,办公方便.个人很喜欢mac 下的那些软件,尤其是keynote.就锁定在Macbook Pro上,但是又觉得没有什么玩头,后来一直找,觉得xps也很符合要求,就开始调查 ...

  5. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  6. 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎

    最近业务上有要求,要实现类似oracle 的dblink   linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/ ...

  7. [MySQL Reference Manual]15. 其他存储引擎

    15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...

  8. utf-8 汉字对照表

    之前从redis中取出一些数据,utf8 16进制编码,想转成字符,没有找到现成的转化工具,先用这个表直接查找对照吧. UTF8编码表大全Code code# Code (coded in UTF-8 ...

  9. ActiveMQ

    前言 MQ--Message Queue,中文翻译为"消息队列",维基百科上的这样描述: 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方 ...

随机推荐

  1. PAL相机

    输入时钟:27M PCLK:54M SDRAM时钟:80M ADV7393时钟:27M 1024*768 60帧    65MHZ

  2. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

  3. 10.1、android输入系统_必备Linux编程知识_inotify和epoll

    1. inotify和epoll 怎么监测键盘接入与拔出? (1)hotplug机制:内核发现键盘接入/拔出==>启动hotplug进程==>发消息给输入系统 (2)inotify机制:输 ...

  4. Spring 使用Cache(转)

    从3.1开始Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事物管理的支持.Spring Cache是作用在方法上的,其核心思想是:当我们在调用一个缓存方法时会把该方法参数 ...

  5. 在 AppDelegate 设置屏幕切换

    //禁止横屏显示 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWin ...

  6. MongoDB 管理

    1.给数据库增加分片功能 mongos> use admin mongos> db.runCommand({enablesharding:"cipnet"}) mong ...

  7. LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结

    前言: 这几天在做LeetCode 里面有2sum, 3sum(closest), 4sum等问题, 这类问题是典型的递归思路解题.该这类问题的关键在于,在进行求和求解前,要先排序Arrays.sor ...

  8. [RxJS] Replace zip with combineLatest when combining sources of data

    This lesson will highlight the true purpose of the zip operator, and how uncommon its use cases are. ...

  9. iOS Universal Static Framework 手动转 XCode Cocoa Framework

    不须要又一次创建Project,手动改动project设置. 第一步:在Project文件里,改动type,去掉static 1. 搜索wrapper.framework.static,去掉stati ...

  10. PWA之Web 应用清单

    原文 简书原文:https://www.jianshu.com/p/5c96242188e8 大纲 1.什么是Web 应用清单 2.“清单文件”:Web App Manifest 规范的应用 3.we ...