本题应该是可以使用实数二分的,不过笔者一直未调出来,而且发现了一种更为优美的解法,那就是逆推。

首先,不难猜到在最优解中当飞船回到 111 号节点时油量一定为 000, 这就意味着减少的油量等于减少之前的油量,即 fuel=mb1−1fuel=\frac{m}{b_{1}-1}fuel=b1​−1m​

我们还可以将起飞和降落视为同一种操作,将公式进行变换,就得到 :

fuel′=ai∗fuel+mai−1fuel'=\frac{a_{i}*fuel+m}{a_{i}-1}fuel′=ai​−1ai​∗fuel+m​ 和 fuel′=bi∗fuel+mbi−1fuel'=\frac{b_{i}*fuel+m}{b_{i}-1}fuel′=bi​−1bi​∗fuel+m​,特判一下 iii 是否等于 111 即可。

Code:

#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1000 + 4;
int a[maxn], b[maxn];
int main()
{
int n, m;
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; ++i)
{
scanf("%d",&a[i]);
if(a[i] <= 1) { printf("-1"); return 0; }
}
for(int i = 1;i <= n; ++i)
{
scanf("%d",&b[i]);
if(b[i] <= 1) { printf("-1"); return 0; }
}
double ans = (double) m / (b[1] - 1);
for(int i = n; i >= 1;--i)
{
ans = (double)(a[i] * ans + m) / (a[i] - 1);
if(i != 1) ans = (b[i] * ans + m) /(b[i] - 1);
}
printf("%.10lf",ans);
return 0;
}

最新文章

  1. ActiveMQ消息队列的使用及应用
  2. android中出现Error retrieving parent for item: No resource found that matches the Theme.AppCompat.Light
  3. Python 基础 - 统计文本里单词的个数以及出现的次数
  4. java笔记--策略模式和简单工厂模式
  5. java ---运算符
  6. 如何更新Linux源
  7. ios 异步处理耗时操作
  8. php 生成器 入门理解
  9. Android Studio 快捷键整理分享
  10. 史上最全的java随机数生成算法[转载]
  11. iOS项目开发常用功能静态库
  12. Scrum 冲刺 第一日
  13. Educational Codeforces Round 53 (Rated for Div. 2)G. Yet Another LCP Problem
  14. pojo类自动生成序列化ID
  15. jmeter 测试计划
  16. Python全栈学习_day005知识点
  17. Cocos Creator采坑:原来使用Cocos Creator做游戏,是有服务器!!!
  18. 用Eclipse构建Maven项目
  19. mysql 8小时timeout问题
  20. vue的手机端框架mint-ui头部header组件实现返回到上一个浏览页面

热门文章

  1. BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)
  2. 【LibreOJ 6278】 数列分块入门 2 (分块)
  3. PHP学习总结(7)——PHP入门篇之PHP注释
  4. Servlet过滤器和监听器知识总结
  5. 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
  6. Python Study(02)之 Context Manager
  7. Web前端开发实战2:二级下拉式菜单之JS实现
  8. JS 正则表达式的位置匹配ZZ
  9. 移除apsx视图引擎,及View目录下的web.config的作用
  10. Visual studio 编译时copy文件、文件夹