bzoj 4952: E

来源:互联网 发布:求一款网络休闲游戏 编辑:程序博客网 时间:2024/06/10 13:38

月赛的水题啦。。
一看就是二分答案嘛。。然后暴力check
但是答案的范围的话可以乱开。。
但我算了一下,我觉得是±2106
这个大家可以想一下为什么然后一开始敲漏了一个0,WA地我怀疑人生
下次还是用科学计数法好一些。。

#include<cstdio>#include<cstdlib>#include<cstring>const int N=1005;int n;double t;double d[N],s[N];double check (double mid){    double ans=0;    for (int u=1;u<=n;u++)    {        double a=s[u]+mid;        if (a<=0) return t+1;        ans=ans+d[u]/a;    }    return ans;}int main(){    scanf("%d%lf",&n,&t);    for (int u=1;u<=n;u++)        scanf("%lf%lf",&d[u],&s[u]);    double l=-2000000,r=2000000;    while (l+1e-7<r)    {        double mid=(l+r)/2;        double lalal=check(mid);        if (lalal>=t) l=mid; //这个时间多了,说明我们偏小了        else  r=mid;    }    printf("%.7lf",l);    return 0;}
原创粉丝点击