Submission #880114

# Submission time Handle Problem Language Result Execution time Memory
880114 2023-11-28T18:08:03 Z serifefedartar Let's Win the Election (JOI22_ho_t3) C++17
0 / 100
414 ms 652928 KB
#include <bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9 + 9;
const ll LOGN = 21;
const ll MAXN = 550;

vector<pair<int,int>> v;
float dp[MAXN][MAXN][MAXN];
int mn[MAXN][MAXN], N, K;
multiset<int> in;
void precalc() {
	for (int i = 0; i < MAXN; i++) {
		for (int j = 0; j < MAXN; j++)
			mn[i][j] = 1000000000;
	}

	for (int k = 1; k <= K; k++) {
		in = multiset<int>();
		int sum = 0;
		for (int i = N; i >= 1; i--) {
			in.insert(v[i].f);
			sum += v[i].f;
			if (in.size() > k) {
				sum -= *prev(in.end());
				in.erase(prev(in.end()));
			}
			mn[k][i] = sum;
		}
	}
}

int main() {
	fast
	cin >> N >> K;

	v = vector<pair<int,int>>(N);
	for (int i = 0; i < N; i++)
		cin >> v[i].f >> v[i].s;
	sort(v.begin(), v.end(), [&](pair<int,int> a, pair<int,int> b) {
		if (a.s == -1 && b.s != -1)
			return false;
		if (b.s == -1)
			return true;
		return (a.s < b.s);
	});
	reverse(v.begin(), v.end());
	v.push_back({-1.0, -1.0});
	reverse(v.begin(), v.end());

	precalc(); 

	for (int i = 0; i < MAXN; i++) {
		for (int j = 0; j < MAXN; j++) {
			for (int k = 0; k < MAXN; k++)
				dp[i][j][k] = 1000000000.0;
		}
	}
	for (int i = 0; i < MAXN; i++)
		dp[0][0][i] = 0;

	for (int i = 1; i <= N; i++) {
		if (v[i].s == -1)
			continue;
		for (int exp = 1; exp <= K; exp++) {
			for (int selected = 0; selected < exp; selected++) {
				// A kullan
				if (dp[i-1][selected][exp] + 1.0 * v[i].f / (exp + 1) < dp[i][selected][exp])
					dp[i][selected][exp] = dp[i-1][selected][exp] + 1.0 * v[i].f / (exp + 1);
				// B kullan
				if (dp[i-1][selected][exp] + 1.0 * v[i].s / (selected + 1) < dp[i][selected+1][exp])
					dp[i][selected+1][exp] = dp[i-1][selected][exp] + 1.0 * v[i].s / (selected + 1);
			}
		}
	}

	double ans = 1000000000.0;
	for (int i = 0; i <= N; i++) {
		for (int exp = 0; exp <= K; exp++) {
			if (dp[i][exp][exp] != 1000000000.0) {
				int rem_req = K - i;
				if (rem_req < 0)
					continue;

				if (dp[i][exp][exp] + mn[rem_req][i+1] * 1.0 / (exp + 1) < ans)
					ans = dp[i][exp][exp] + mn[rem_req][i+1] * 1.0 / (exp + 1);
			}
		}
	}

	cout << setprecision(15) << fixed << ans << "\n";
}

Compilation message

Main.cpp: In function 'void precalc()':
Main.cpp:28:18: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   28 |    if (in.size() > k) {
      |        ~~~~~~~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 178 ms 652624 KB Output is correct
2 Correct 122 ms 652624 KB Output is correct
3 Correct 122 ms 652928 KB Output is correct
4 Correct 122 ms 652552 KB Output is correct
5 Runtime error 13 ms 348 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 178 ms 652624 KB Output is correct
2 Correct 122 ms 652624 KB Output is correct
3 Correct 122 ms 652928 KB Output is correct
4 Correct 122 ms 652552 KB Output is correct
5 Runtime error 13 ms 348 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 119 ms 652616 KB Output is correct
2 Correct 133 ms 652792 KB Output is correct
3 Correct 122 ms 652564 KB Output is correct
4 Correct 119 ms 652760 KB Output is correct
5 Correct 124 ms 652624 KB Output is correct
6 Correct 125 ms 652664 KB Output is correct
7 Correct 118 ms 652628 KB Output is correct
8 Correct 122 ms 652836 KB Output is correct
9 Correct 129 ms 652628 KB Output is correct
10 Correct 127 ms 652688 KB Output is correct
11 Incorrect 124 ms 652612 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 119 ms 652616 KB Output is correct
2 Correct 133 ms 652792 KB Output is correct
3 Correct 122 ms 652564 KB Output is correct
4 Correct 119 ms 652760 KB Output is correct
5 Correct 124 ms 652624 KB Output is correct
6 Correct 125 ms 652664 KB Output is correct
7 Correct 118 ms 652628 KB Output is correct
8 Correct 122 ms 652836 KB Output is correct
9 Correct 129 ms 652628 KB Output is correct
10 Correct 127 ms 652688 KB Output is correct
11 Incorrect 124 ms 652612 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 119 ms 652616 KB Output is correct
2 Correct 133 ms 652792 KB Output is correct
3 Correct 122 ms 652564 KB Output is correct
4 Correct 119 ms 652760 KB Output is correct
5 Correct 124 ms 652624 KB Output is correct
6 Correct 125 ms 652664 KB Output is correct
7 Correct 118 ms 652628 KB Output is correct
8 Correct 122 ms 652836 KB Output is correct
9 Correct 129 ms 652628 KB Output is correct
10 Correct 127 ms 652688 KB Output is correct
11 Incorrect 124 ms 652612 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 414 ms 652628 KB Output is correct
2 Correct 412 ms 652824 KB Output is correct
3 Correct 392 ms 652632 KB Output is correct
4 Incorrect 398 ms 652880 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 178 ms 652624 KB Output is correct
2 Correct 122 ms 652624 KB Output is correct
3 Correct 122 ms 652928 KB Output is correct
4 Correct 122 ms 652552 KB Output is correct
5 Runtime error 13 ms 348 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -