黄题WA求助
查看原帖
黄题WA求助
781159
Lovely_Elaina楼主2023/1/10 21:29

double真是烦呐(q'w'q

40分代码

#include <bits/stdc++.h>
using namespace std;
typedef double dint;
const int N = 1e5+5;

/*
1)在验证一个使用时间时,若设备已有的能量大于使用时间需要的能量,忽略该设备。
2)否则用充电器充电,使设备已有的能量等于使用时间需要的能量,并记录需要的能量。
3)最后比较需要的能量总和和充电器最多提供的能量。
*/

int n,p,wind_kaka;
dint a[N],b[N],ES;

//二分使用时间(use time)
bool check(dint ut){
    //剩余时间(residue time)
    dint rt = ut;
    for(int i = 1; i <= n; i++){
        if(b[i] >= a[i]*ut)
            continue;
        rt += b[i]-a[i]*ut;
    }
    return rt >= 0;
}

int main() {
    scanf("%d %d",&n,&p);
    for(int i = 1; i <= n; i++){
        scanf("%lf %lf",&a[i],&b[i]);
        wind_kaka += a[i];
    }
    if(wind_kaka <= p){
        printf("-1\n");
        return 0;
    }
    dint l = 0,r = (dint)100000000;
    while(l+0.000001 < r){
        dint mid = (l + r) / 2.0;
        if(check(mid)){
            ES = mid;
            l = mid;
        }else r = mid;
    }
    printf("%lf\n",ES);
    return 0;
}

改完以后变30了

#include <bits/stdc++.h>
using namespace std;
typedef double dint;
const int N = 1e5+5;

/*
1)在验证一个使用时间时,若设备已有的能量大于使用时间需要的能量,忽略该设备。
2)否则用充电器充电,使设备已有的能量等于使用时间需要的能量,并记录需要的能量。
3)最后比较需要的能量总和和充电器最多提供的能量。
*/

int n,p,wind_kaka;
dint a[N],b[N],ES;

//二分使用时间(use time)
bool check(dint ut){
    //剩余时间(residue time)
    dint rt = ut;
    for(int i = 1; i <= n; i++){
        if(b[i] >= a[i]*ut)
            continue;
        rt += (dint)((long long)b[i]-(long long)(a[i]*ut));
    }
    return rt >= 0;
}

int main() {
    scanf("%d %d",&n,&p);
    for(int i = 1; i <= n; i++){
        scanf("%lf %lf",&a[i],&b[i]);
        wind_kaka += a[i];
    }
    if(wind_kaka <= p){
        printf("-1\n");
        return 0;
    }
    dint l = 0,r = (dint)1e9;
    while(l+0.000001 < r){
        dint mid = (l + r) / 2.0;
        if(check(mid)){
            ES = mid;
            l = mid;
        }else r = mid;
    }
    printf("%lf\n",ES);
    return 0;
}
2023/1/10 21:29
加载中...