思路
二分时间。对于时间,在这期间要一刻不停的吃,因此将所有冰激凌减去融化的部分后,检查把剩下的部分全部吃完需要多长时间。
代码
#include<bits/stdc++.h>
#define rep(i,st,ed) for(int i=st;i<=ed;++i)
using namespace std;
const int N=3e5+10;
int n;
double v,u;
double a[N];
bool check(double ti)
{
double t=ti;
rep(i,1,n)
{
double res=a[i]-v*ti;
if(res>0)
t-=res/u;
}
return t>=0;
}
int main()
{
scanf("%d %lf %lf",&n,&v,&u);
rep(i,1,n)
scanf("%lf",a+i);
double l=0,r=1e9;
rep(i,1,100)
{
double mid=(l+r)/2;
if(check(mid))
r=mid;
else
l=mid;
}
printf("%.6lf\n",(l+r)/2*u);
}