• C


      总共有n个星球,然后每个星球都有一个起飞燃料的使用效率a[i]和降落的燃料使用效率b[i],就拿起飞来说,也就是起飞每消耗1吨燃料可以提升的物品吨数,假如起飞前总重为m+f,那么起飞消耗(m+f)/a[i]吨燃料,起飞后总重为m+f-(m+f)/a[i]。

      这题反着推就行,比如说是从1->2->3->4->1 ,只需要从终点也就是最后一个1出发往前推并且还要假设在最后一个1位置只有货物重量m没有燃料质量,只有这样推出的在第一个1的起飞前所携带燃料质量才是最小的,这题我当时是推公式的时候卡了,打完了又推出来了,起飞前燃料质量=(起飞后的燃料质量*对应星球的起飞燃料效率+货物质量m)/(对应星球的起飞燃料效率-1),降落前的燃料质量=(货物质量m+降落后的燃料质量*对应星球的降落燃料效率)/(对应星球的降落燃料效率-1).还要注意一旦有一个星球的a[i]或是b[i]等于1了,那就说明无法就1到n再回到1,因为燃料效率为1的话就说携带了多少吨的东西就要消耗多少吨的燃料,比如说携带了m货物,f燃料,那么就要消耗m+f燃料,这明显是不可能的.

    #include<bits/stdc++.h>
    using namespace std;
    double a[1005],b[1005];
    int main()
    {
        int n,m;
        cin>>n>>m;
        int flag=1;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]==1)
                flag=0;
        }
        for(int i=1;i<=n;i++)
        {
            cin>>b[i];
            if(b[i]==1)
                flag=0;
        }
        if(!flag)
        {
            cout<<-1<<endl;
            return 0;
        }
        double f=m/(b[1]-1);
        for(int i=n;i>=1;i--)
        {
            f=(f*a[i]+m)/(a[i]-1);
            if(i==1) break;
            f=(m+f*b[i])/(b[i]-1);
        }
        printf("%.10lf
    ",f);
        return 0;
    
    }
  • 相关阅读:
    CodeForcesGym 100524A Astronomy Problem
    ZOJ 2567 Trade
    HDU 3157 Crazy Circuits
    CodeForcesGym 100212E Long Dominoes
    UVALive 6507 Passwords
    [转]
    java socket
    Spark RDD Operations(2)
    Spark cache 和 persist
    vim 基础命令
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755057.html
Copyright © 2020-2023  润新知