题目:http://codeforces.com/problemset/problem/1011/C
题意:给你一个飞船,你从地球到火星再回来,飞船去的时候经过每个星球都要消耗燃料,回来的时候一步返回不消耗任何燃料,已知飞船的重量和每个星球起飞和落下1吨燃料能支持多少重量的飞船起飞,求出最少需要的燃油的质量。
思路:这个题要从后往前推,设 火箭加燃油的总质量为x,燃油的质量为y,那么,
x+y/a[i]=y,得到y=x/(a[i]-1)
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <set>
#include <map>
using namespace std;
double a[1005];
double b[1005];
int main()
{
int n,flag=0,i;
double m,sum,y;
scanf("%d%lf",&n,&m);
sum=0;
for( i=1; i<=n; i++)
{
scanf("%lf",&a[i]);
if(a[i]<=1)
flag=1;
}
for( i=1; i<=n; i++)
{
scanf("%lf",&b[i]);
if(b[i]<=1)
flag=1;
}
if(flag==1)
{
cout<<"-1"<<endl;
return 0;
}
for(int i=1; i<=n; i++)
{
y=m/(a[i]-1);
m+=y;
sum+=y;
y=m/(b[i]-1);
m+=y;
sum+=y;
}
printf("%.10lf\n",sum);
return 0;
}