【a302】&&【9306】贮油点问题
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】贮油点问题的更多相关文章
- 贮油点问题(C++)
贮油点问题…..一道送命系列的递推… 描述 Description 一辆重型卡车欲穿过S公里的沙漠,卡车耗汽油为1升/公里,卡车总载油能力为W公升.显然卡车装一次油是过不了沙漠的.因此司机必须设法在沿 ...
- c语言-递推算法1
递推算法之一:倒推法 1.一般分析思路: if 求解初始条件F1 then begin { 倒推 } 由题意(或递推关系)确定最终结果Fn; 求出倒推关系式Fi-1 =G(Fi ); i=n; { 从 ...
- 一些最常见的SNMP的OID自动翻译成zabbix数字进行表示(华为9306)
转载自:https://blog.51cto.com/davidbj/1173954 随着Zabbix 2.0版本的发布,很多企业开始用zabbix来代替之前的Nagio.Cacti等其它监控软件.至 ...
- Dell XPS 13 9306安装 macOS 10.12.6
一直在考虑买一个手上的本,轻薄,办公方便.个人很喜欢mac 下的那些软件,尤其是keynote.就锁定在Macbook Pro上,但是又觉得没有什么玩头,后来一直找,觉得xps也很符合要求,就开始调查 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎
最近业务上有要求,要实现类似oracle 的dblink linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/ ...
- [MySQL Reference Manual]15. 其他存储引擎
15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...
- utf-8 汉字对照表
之前从redis中取出一些数据,utf8 16进制编码,想转成字符,没有找到现成的转化工具,先用这个表直接查找对照吧. UTF8编码表大全Code code# Code (coded in UTF-8 ...
- ActiveMQ
前言 MQ--Message Queue,中文翻译为"消息队列",维基百科上的这样描述: 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方 ...
随机推荐
- LM4990音频功放芯片
我们选用的一种封装:我们用的是DGK封装. 典型电路图: 下面是示意图:四中封装的示意图是不一样的: 下面是真正的原理图: 高放大倍数的原理图: 查分式的: 单个输入的原理图: 下面是有关电源的选择:
- cURL(wget)—— 测试 RESTful 接口及模拟 GET/POST/PUT/DELETE/OPTIONS 请求
cURL 是一个简单的 http 命令行工具.与最优秀的 Unix 工具一样,在设计之时,cURL 是个小型程序,功能十分专一,而且是故意为之,仅用于访问 http 服务器.(在 Linux 中,可以 ...
- SVGALib
SVGALib是一套运行于Linux及FreeBSD下的开放源代码低阶绘图函式库,它允许程式设计人员变更视讯模式及全屏幕图像,许多热门的电脑游戏如Quake及Doom都源自此技术. 范例 编辑 #in ...
- 6.2、Android硬件访问服务编写系统代码
1.实现接口文件给App使用,接口文件是应用程序查询获得服务时获得 使用AIDL(Android接口定义语言)来实现ILedService.java接口 定义ILedService.aidl inte ...
- shrio 权限管理filterChainDefinitions过滤器配置(转)
/** * Shiro-1.2.2内置的FilterChain * @see ============================================================= ...
- YASM User Manual
This document is the user manual for the Yasm assembler. It is intended as both an introduction and ...
- trident原理及编程指南
目录 trident原理及编程指南 一.理论介绍 1.trident是什么? 2.trident处理单位 3.事务类型 二.编程指南 1.定义输入流 2.统计单词数量 3.输出统计结果 4.split ...
- MFC只允许进行一个实例
APP---InitInstance() 放在所有程序运行前 //只允许运行一个实例 BOOL bfound = FALSE; hmutex = CreateMutex(NULL,TRUE,&quo ...
- LUA凝视语法
server端代码已经完毕,client正在优化.游戏不久将上线,近期没事做,老大要我開始学习project Anarchy了.里面代码是比較偏爱的C++,包括lua,暂没学过lua.看了下LUA代码 ...
- Web系统自动化部署脚本
Web开发的项目,除了在本地直接运行外,还可能经常需要在服务器上部署. 写了个自动化部署的脚本,仅供参考. 不少地方需要配置路径,个人建议使用绝对路径,不用依赖执行脚本时所在的路径. #!/bin/s ...