Submission #1355256

#TimeUsernameProblemLanguageResultExecution timeMemory
1355256gayLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
1064 ms952 KiB
#include <bits/stdc++.h>
#include <experimental/random>
#include <random>

//#include <ext/pb_ds/assoc_container.hpp>
//using namespace __gnu_pbds;

using namespace std;

using ld = double;
using ll = long long;

const int INF = 1e9, MOD = 1e9 + 7;

void solve();

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    int q = 1;
    //cin >> q;
    while (q--) {
        solve();
    }
}

vector<pair<int, int>> a;

int n, k;
ld get(int x) {
    vector<vector<ld>> dp(x + 1, vector<ld>(k - x + 1, INF));
    dp[0][0] = 0;
    int col = 1;
    for (auto [sec, fir] : a) {
        for (int i = min(x, col); i >= 0; i--) {
            for (int j = min(col - i, k - x); j >= 0; j--) {
                if (i != 0 && sec != -1) {
                    dp[i][j] = min(dp[i][j], dp[i - 1][j] + (ld) sec / (ld) i);
                }
                if (j != 0) {
                    dp[i][j] = min(dp[i][j], dp[i][j - 1] + (ld) fir / (ld) (x + 1));
                }
            }
        }
        col++;
    }
    return dp[x][k - x];
}

void solve() {
    cin >> n >> k;
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        int x, y; cin >> x >> y;
        if (y != -1) cnt++;
        a.emplace_back(y, x);
    }
    sort(a.begin(), a.end());
    ld ans = INF;
    int l = 0, r = min(k, cnt);
    while (r - l > 2) {
        int m1 = l + (r - l) / 3;
        int m2 = r - (r - l) / 3;
        ld f1 = get(m1), f2 = get(m2);
        ans = min({ans, f1, f2});
        if (f1 < f2) {
            r = m2;
        } else {
            l = m1;
        }
    }
    for (int i = l; i <= r; i++) {
        ans = min(ans, get(i));
    }
    cout << fixed << setprecision(9) << ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...