题目描述
藤原海鲜店以虾好吃而闻名,所以藤原家的车每天晚上都会来回秋名山去捕虾,俗称逮虾户。因为每天都要开车无数次,藤原已经成为了老司机,以至于他不用看车的表盘都可以感觉出车的速度。但是这样的感觉是有偏差的,假设这个偏差是恒定的,且藤原在开车过程中的车速也是恒定的,接下来给你藤原的 n 次车程和总行驶时间t,其中第 i 次车程的行驶距离为 si, 藤原感觉到的车速为 vi, 求藤原对车速的感知偏差d(d = 实际车速 - vi, d 可能为负数)
输入
第一行:2个数n和t,中间用空格分割(1 ≤ n ≤ 1000,1 ≤ t ≤ 10^6)
后面n行:每行2个数si和vi,中间用空格分割(1 ≤ si ≤ 1000,-1000 ≤ vi ≤ 1000)
输出
输出一个数,表示藤原对车速的感知偏差,误差不超过10-6。
样例输入 Copy
3 5
4 -1
4 0
10 3
样例输出 Copy
3.000000000
提示
对于40%的数据, n <= 10
对于65%的数据, n <= 100
对于100%的数据, n <= 1000
//浮点数二分
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
double esp=1e-7;
int n,s;
double si,vi,mid,l,m;
struct node
{
double si,vi;
}e[N];
int main()
{
l=-8888888;
scanf("%d %lf",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lf %lf",&e[i].si,&e[i].vi);
l=max(l,-e[i].vi);
}
double r=2131312.0 ;
while(r-l>esp)
{
mid=(l+r)/2.0;
double sum=0;
for(int i=1;i<=n;i++)
{
sum=sum+(e[i].si/(mid+e[i].vi));
// cout<<e[i].
}
if(sum<=m) r=mid;
else l=mid;
}
printf("%.9lf",l);
}