题解思路:当C越大时这个汽车运行的总时间越小所以可以用二分查找C接近t的时候值
题目链接
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
#define mid (l+r)/2
const double eps = 1e-9;
const double inf = 1e6+1000;
const int mx = 1e3+5;
double d[mx],s[mx],t;
int n;
bool calc(double c){
double sum = 0;
for(int i = 0; i < n; i++){
if(s[i]+c<=1e-9)
return 1;
sum += d[i]/(s[i]+c);
}
if(sum < t)
return 0;
return 1;
}
int main(){
double l,r;
while(scanf("%d%lf",&n,&t)!=EOF){
for(int i = 0; i < n; i++)
scanf("%lf%lf",&d[i],&s[i]);
l = -inf;
r = inf;
while(l+eps<r){
if(calc(mid))
l = mid;
else
r = mid;
}
printf("%.9lf\n",l);
}
return 0;
}