求助80pts
查看原帖
求助80pts
1001552
newsname楼主2023/8/4 09:07
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

struct Device {
    int a;
    int b;
};

bool cmp(const Device& d1, const Device& d2) {
    return d1.a < d2.a;
}

bool check(vector<Device>& devices, int p, double t) {
    double totalEnergy = 0;

    for (int i = 0; i < devices.size(); i++) {
        if (devices[i].b >= t * devices[i].a) {
            continue;
        }
        totalEnergy += t * devices[i].a - devices[i].b;
    }

    return totalEnergy <= p * t;
}

double getMaxTime(vector<Device>& devices, int p) {
    sort(devices.begin(), devices.end(), cmp);

    double left = 0;
    double right = 1e9;
    double ans = 0;

    while (right - left > 1e-5) {
        double mid = (left + right) / 2;
        if (check(devices, p, mid)) {
            ans = mid;
            left = mid;
        } else {
            right = mid;
        }
    }

    return ans;
}

int main() {
    int n, p;
    cin >> n >> p;

    vector<Device> devices(n);
    for (int i = 0; i < n; i++) {
        cin >> devices[i].a >> devices[i].b;
    }

    double maxTime = getMaxTime(devices, p);

    if (maxTime == 0) {
        cout << -1 << endl;
    } else {
        cout << fixed << maxTime << endl;
    }

    return 0;
}

给个正解思路也行

2023/8/4 09:07
加载中...