社区讨论

一直只AC了七个点,求助

P3743小鸟的设备参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo8s5ieo
此快照首次捕获于
2023/10/27 23:40
2 年前
此快照最后确认于
2023/10/27 23:40
2 年前
查看原帖
CPP
#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;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...