C. Fly

题目链接

Codeforces Round #499 (Div. 2)--C. Fly

题解

简单题。题意大概是一个火箭要飞往多个星球,起飞与降落需要与重量(包含火箭自身及燃料)及某个给定系数相关的燃料,求最小所需的燃料。

由给定的燃料消耗公式从终点逆推回起点,假设飞达后重量为m,系数为a,则本次飞行小号燃料为m/(a-1),飞行前总重量为m+m/(a-1)。

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;

const double w = 0.0000001;
int n;
double ans, m, q1;
double a[1005], b[1005];

int main()
{
    cin >> n >> m;
    double pre = m;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        if (fabs(a[i] - 1)<w) {
            cout << -1; return 0;
        }
    }
    for (int i = 0; i < n; i++) {
        cin >> b[i];
        if (fabs(b[i] - 1)<w) {
            cout << -1; return 0;
        }
    }
    for (int i = n; i >= 1; i--) {
        q1 = m / (b[i%n] - 1);
        m += q1;
        q1 = m / (a[i - 1] - 1);
        m += q1;
    }
    printf("%.10lf", m - pre);
}

标签: math, binary search

添加新评论