Submission #1233832

#TimeUsernameProblemLanguageResultExecution timeMemory
1233832diparLet's Win the Election (JOI22_ho_t3)C++20
61 / 100
2596 ms5604 KiB
#include <bits/stdc++.h>
using namespace std;

#define chinatsu ios_base::sync_with_stdio(false);
#define kano cin.tie(nullptr); cout.tie(nullptr)
#define int long long
#define double long double
#define fi first
#define se second
#define pb push_back

double dp[2][501][501];

signed main(){
    chinatsu kano;
    int n, k;
	cin >> n >> k;
	vector<array<double, 2>> a(n);
	int cnt = 0;
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < 2; ++j) {
			cin >> a[i][j];	
		}
		cnt += (a[i][1] != -1);
		swap(a[i][0], a[i][1]);
	}
	sort(a.begin(), a.end());
	int left = 0, right = min(k, cnt) - 1;
	int res = min(k, cnt);
	auto calc = [&](int take){
		for (int i = 0; i < 2; ++i) {
			for (int j = 0; j <= k - take; ++j) {
				for (int z = 0; z <= take; ++z) {
					dp[i][j][z] = 1e18;
				}
			}
		}
		dp[0][0][0] = 0;
		for (int j = 0; j < n; ++j) {
			int p = j & 1;
			for (int l = 0; l <= k - take; ++l) {
				for (int z = 0; z <= take; ++z) {
					dp[p ^ 1][l][z] = dp[p][l][z];
					if (l > 0) {
						dp[p ^ 1][l][z] = min(dp[p ^ 1][l][z], dp[p][l - 1][z] + a[j][1] / (take + 1));
					}
					if (a[j][0] != -1 && z > 0) {
						dp[p ^ 1][l][z] = min(dp[p ^ 1][l][z], dp[p][l][z - 1] + a[j][0] / z);
					}
				}
			}
		}
		return dp[n & 1][k - take][take];
	};
	while (left <= right) {
		int m = (left + right) / 2;
		if (calc(m) <= calc(m + 1)) {
			right = m - 1;
			res = m;
		} else left = m + 1;
	}
	cout << fixed << setprecision(15) << calc(res) << 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...