月赛的水题啦。。
一看就是二分答案嘛。。然后暴力check
但是答案的范围的话可以乱开。。
但我算了一下,我觉得是
±2∗106
这个大家可以想一下为什么然后一开始敲漏了一个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;
}