Submission #1188745

#TimeUsernameProblemLanguageResultExecution timeMemory
1188745SoulKnightLet's Win the Election (JOI22_ho_t3)C++20
0 / 100
2596 ms4420 KiB
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define double long double
#define ln '\n'

#ifdef LOCAL
#define gg(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
    cout << vars << " = ";
    string delim = "";
    (..., (cout << delim << values, delim = ", "));
    cout << '\n';
}
#else
#define gg(...)
#endif


array<int, 2> a[505];
double dp[505][505];

void solve(){
    int n, k; cin >> n >> k;
    for (int i = 1; i <= n; i++){
        cin >> a[i][1] >> a[i][0];
        if (a[i][0] == -1) a[i][0] = 2e9;
    }

    memset(dp, 0x4f, sizeof(dp));
    double ans = 5e18;
    cout << dp[0][0] << ln;


    for (int worker = 1; worker <= k; worker++){
        sort(a+1, a+n+1);
        dp[0][1] = 0;

        for (int i = 1; i <= n; i++){
            auto [getWorker, getVote] = a[i];

            for (int j = 1; j <= worker; j++){
                dp[i][j] = min(
                            (j-1 == 0? 1e18: (double)getWorker / (double)(j-1))  + dp[i-1][j-1],
                            (double)getVote / (double)worker + dp[i-1][j]
                           );
            }
        }

        for (int i = k; i <= n; i++) ans = min(ans, dp[i][k]);

        for (int i = k; i >= worker-1; i--){
            sort(a+i+1, a+n+1, [&](const array<int,2>& x, const array<int,2>& y){
                return x[1] < y[1] || (x[1] == y[1] && x[0] < y[0]);
            });

            double cur = 0.0;
            for (int j = i+1; j <= k; j++){
                cur += a[j][1];
            }

            ans = min(ans, cur / (double)(worker) + dp[i][worker]);
        }
    }

    cout << fixed << setprecision(16) << ans << ln;
}


signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    solve();

    // int TT; cin >> TT;
    // while (TT--) solve();

    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...