Submission #1161604

#TimeUsernameProblemLanguageResultExecution timeMemory
1161604fryingducLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
81 ms328 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "bits/debug.h" #else #define debug(...) #endif const int maxn = 505; int n, k; int a[maxn], b[maxn]; double f[2][maxn]; int ord[maxn]; void solve() { cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> a[i] >> b[i]; if (b[i] == -1) { b[i] = 1e9; } } iota(ord + 1, ord + n + 1, 1); sort(ord + 1, ord + n + 1, [](const int &x, const int &y) -> bool { return b[x] < b[y]; }); double res = 1e18; for (int x = 0; x <= k; ++x) { memset(f, 0x3f, sizeof(f)); f[0][0] = 0; for (int i = 1; i <= n; ++i) { for (int j = 0; j <= min(i, k - x); ++j) { f[i & 1][j] = f[(i - 1) & 1][j]; if (i - j <= x) { f[i & 1][j] += 1.0 * b[ord[i]] / (i - j); } if (j > 0) { f[i & 1][j] = min(f[i & 1][j], f[(i - 1) & 1][j - 1] + 1.0 * a[ord[i]] / (x + 1)); } } } res = min(res, f[n & 1][k - x]); } cout << fixed << setprecision(9) << res; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); 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...