95分TLE!!
查看原帖
95分TLE!!
1100788
CheeseFunction楼主2024/6/18 19:40

蒟蒻在调试nn次后选择来寻找大神! 95分TLE,详细看链接

求助哇!

玄关!

源码:

#include<bits/stdc++.h>
using namespace std;
int n,m;    //足够了,不要浪费空间
int a[100100],b[100100];    //还是老样子,多开100个空间
bool check(double);
int main(){
    long long sum=0;
    scanf("%d%d",&n,&m);    //省点时间
    for(int i=0;i<n;i++){
        scanf("%d%d",&a[i],&b[i]);
        sum+=b[i];
    }
    if(sum<=m){
        cout<<-1;
        return 0;
    }
    double mid,left=0,right=1e10,cnt;
    //二分答案的模板,谁不做笔记?统统吃掉!
    while(right-left>=1e-11){    //精度,精度!
        mid=(right+left)/2;
        if(check(mid)){
            cnt=mid;//中心思想
            left=mid+1e-11;//主要原因是保留十位小数
        }else{
            right=mid-1e-11;//精度到1e-11就差不多了,再小就丢精度了(时间也有可能爆)
        }
    }
    printf("%.10lf",cnt);
}
bool check(double mid){
    double cnt=0;
    for(int i=0;i<n;i++){
        double now;
        now=a[i]*mid;   //如果这个结果小于等于b[i],也就是说这段时间内他不会没电,就不冲
        if(now>b[i]){
            cnt+=now-b[i];  //充多少?
        }
    }
    return cnt<=m*mid;
}
2024/6/18 19:40
加载中...