답안 #880121

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
880121 2023-11-28T18:42:35 Z serifefedartar Let's Win the Election (JOI22_ho_t3) C++17
22 / 100
416 ms 652992 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 = 1; 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, -1});
	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);
			}
		}
	}

	float 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) {
      |        ~~~~~~~~~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 148 ms 652628 KB Output is correct
2 Correct 117 ms 652560 KB Output is correct
3 Correct 116 ms 652624 KB Output is correct
4 Correct 121 ms 652652 KB Output is correct
5 Runtime error 12 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 148 ms 652628 KB Output is correct
2 Correct 117 ms 652560 KB Output is correct
3 Correct 116 ms 652624 KB Output is correct
4 Correct 121 ms 652652 KB Output is correct
5 Runtime error 12 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 121 ms 652628 KB Output is correct
2 Correct 125 ms 652664 KB Output is correct
3 Correct 119 ms 652676 KB Output is correct
4 Correct 116 ms 652600 KB Output is correct
5 Correct 118 ms 652784 KB Output is correct
6 Correct 118 ms 652628 KB Output is correct
7 Correct 116 ms 652728 KB Output is correct
8 Correct 117 ms 652692 KB Output is correct
9 Correct 116 ms 652680 KB Output is correct
10 Correct 117 ms 652628 KB Output is correct
11 Correct 132 ms 652788 KB Output is correct
12 Correct 116 ms 652564 KB Output is correct
13 Correct 121 ms 652672 KB Output is correct
14 Correct 117 ms 652628 KB Output is correct
15 Correct 120 ms 652624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 121 ms 652628 KB Output is correct
2 Correct 125 ms 652664 KB Output is correct
3 Correct 119 ms 652676 KB Output is correct
4 Correct 116 ms 652600 KB Output is correct
5 Correct 118 ms 652784 KB Output is correct
6 Correct 118 ms 652628 KB Output is correct
7 Correct 116 ms 652728 KB Output is correct
8 Correct 117 ms 652692 KB Output is correct
9 Correct 116 ms 652680 KB Output is correct
10 Correct 117 ms 652628 KB Output is correct
11 Correct 132 ms 652788 KB Output is correct
12 Correct 116 ms 652564 KB Output is correct
13 Correct 121 ms 652672 KB Output is correct
14 Correct 117 ms 652628 KB Output is correct
15 Correct 120 ms 652624 KB Output is correct
16 Correct 121 ms 652624 KB Output is correct
17 Correct 116 ms 652756 KB Output is correct
18 Correct 117 ms 652736 KB Output is correct
19 Correct 119 ms 652628 KB Output is correct
20 Correct 117 ms 652556 KB Output is correct
21 Runtime error 12 ms 348 KB Execution killed with signal 11
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 121 ms 652628 KB Output is correct
2 Correct 125 ms 652664 KB Output is correct
3 Correct 119 ms 652676 KB Output is correct
4 Correct 116 ms 652600 KB Output is correct
5 Correct 118 ms 652784 KB Output is correct
6 Correct 118 ms 652628 KB Output is correct
7 Correct 116 ms 652728 KB Output is correct
8 Correct 117 ms 652692 KB Output is correct
9 Correct 116 ms 652680 KB Output is correct
10 Correct 117 ms 652628 KB Output is correct
11 Correct 132 ms 652788 KB Output is correct
12 Correct 116 ms 652564 KB Output is correct
13 Correct 121 ms 652672 KB Output is correct
14 Correct 117 ms 652628 KB Output is correct
15 Correct 120 ms 652624 KB Output is correct
16 Correct 121 ms 652624 KB Output is correct
17 Correct 116 ms 652756 KB Output is correct
18 Correct 117 ms 652736 KB Output is correct
19 Correct 119 ms 652628 KB Output is correct
20 Correct 117 ms 652556 KB Output is correct
21 Runtime error 12 ms 348 KB Execution killed with signal 11
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 405 ms 652824 KB Output is correct
2 Correct 391 ms 652624 KB Output is correct
3 Correct 393 ms 652992 KB Output is correct
4 Correct 416 ms 652620 KB Output is correct
5 Correct 393 ms 652624 KB Output is correct
6 Correct 397 ms 652824 KB Output is correct
7 Correct 392 ms 652816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 148 ms 652628 KB Output is correct
2 Correct 117 ms 652560 KB Output is correct
3 Correct 116 ms 652624 KB Output is correct
4 Correct 121 ms 652652 KB Output is correct
5 Runtime error 12 ms 344 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -