world final2017-E 二分

来源:互联网 发布:淘宝分销和代销的区别 编辑:程序博客网 时间:2024/05/21 21:38

题解思路:当C越大时这个汽车运行的总时间越小所以可以用二分查找C接近t的时候值
题目链接

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>using namespace std;#define mid (l+r)/2const 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;}