제출 #1268073

#제출 시각아이디문제언어결과실행 시간메모리
1268073ChuanChenLet's Win the Election (JOI22_ho_t3)C++20
10 / 100
5 ms328 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;

const double INF = 1e18;

int main() {
    int n, k;
    cin >> n >> k;
    vector<pair<double, double>> states;
    for (int i = 0; i < n; i++) {
        double a, b;
        cin >> a >> b;
        if (b == -1) b = INF;
        states.push_back({a, b});
    }

    sort(states.begin(), states.end(), [](const pair<double, double> &p1, const pair<double, double> &p2) {
        return p1.second < p2.second;
    });

    double ans = INF;

    for (int m = 0; m <= min(n, k); m++) {
        if (m > 0 && states[m-1].second >= INF) {
            break;
        }
        double time_collab = 0.0;
        for (int i = 0; i < m; i++) {
            time_collab += states[i].second / (i + 1);
        }
        vector<double> a_remaining;
        for (int i = m; i < n; i++) {
            a_remaining.push_back(states[i].first);
        }
        if (a_remaining.size() < k - m) {
            continue;
        }
        sort(a_remaining.begin(), a_remaining.end());
        double sum_vote = 0.0;
        for (int i = 0; i < k - m; i++) {
            sum_vote += a_remaining[i];
        }
        double time_vote = sum_vote / (m + 1);
        ans = min(ans, time_collab + time_vote);
    }

    cout << fixed << setprecision(10) << ans << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...