zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    元素模式
    完美C++(第5版)(双色)
    ASP.NET Web API 2框架揭秘
    跨终端 Web
    WebKit技术内幕
    云计算时代——本质、技术、创新、战略
    互联网创业密码
    Netty权威指南
    Robot Framework 学习笔记(二)-------第一个脚本
    Robot Framework学习笔记(一)------环境搭建
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755057.html
Copyright © 2011-2022 走看看