想问下大家一个问题
查看原帖
想问下大家一个问题
841612
xian_love楼主2024/8/7 17:49
#include<bits/stdc++.h>
using namespace std;
int n,p;
const int N = 100010;
struct node
{
    int a,b;
}c[N];
int check(double x)
{
    double sum = p*x; //只能够充这么多的电 
    for(int i = 1;i<=n;i++)
    {
        if(c[i].a * x > c[i].b)
        {
            sum -= c[i].a * x - c[i].b;
        }
        if(sum < 0)return 0;
    }
    return 1;
}
int main()
{
    cin>>n>>p;
    for(int i = 1;i<=n;i++)scanf("%d %d",&c[i].a,&c[i].b);
    double l = 0 ,r = 1e10;
    while(l + 1e-6 < r)
    {
        double mid = (l + r) / 2;
        if(check(mid)) l = mid;
        else r = mid;
    }
    if(r >= 1e10)cout<<"-1"<<endl;
    else cout<<l<<endl;
    return 0;
}

在这里我的下界改为了-1就无法通过了是为啥,按道理我只是扩大了二分的区间,时间复杂度大一点而已,威为啥通过不了捏?

2024/8/7 17:49
加载中...