一直只AC了七个点,求助
查看原帖
一直只AC了七个点,求助
706459
Go_for_itligli666666楼主2022/6/9 16:49
#include<iostream>
#include<cmath>
using namespace std;
using namespace std;
int check(double mid,long n,long p,long a[],long b[]){
    double need=0;
    for(long i=0;i<n;i++){
        if(a[i]*mid>b[i]){
            need+=a[i]*mid-b[i];
        }
    }
    //cout<<"need="<<need<<"      p*mid="<<p*mid<<endl;
    if(fabs(need-p*mid)<10e-3){
        return 0;
    }
    else if(need>p*mid){
        //时间太长了,应该right=mid
        return -1;
    }
    else{
        return 1;
    }
}

int main(){
    long n;
    long p;
    cin>>n>>p;
    long a[n],b[n];
    for(long i=0;i<n;i++){
        cin>>a[i]>>b[i];
    }
    double left=0,right=pow(2,sizeof(long long)*8);
    //cout<<"right="<<right<<endl;
    while(right-left>10e-4){
        double mid=(left+right)/2;
        //cout<<"mid="<<mid<<endl;
        int tip=check(mid,n,p,a,b);
        if(tip==0){
            cout<<mid<<endl;
            break;
        }
        else if(tip<0){
            //能用时间比mid长
            right=mid;
        }
        else{
            left=mid;
        }
    }
    if(left>right||right==pow(2,sizeof(long long)*8)){
        cout<<-1<<endl;
    }
    return 0;
}
2022/6/9 16:49
加载中...