답안 #938012

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
938012 2024-03-04T17:38:20 Z vjudge1 Let's Win the Election (JOI22_ho_t3) C++17
21 / 100
1025 ms 600 KB
#include <bits/stdc++.h>

using namespace std;

typedef long double ld;

int N, K; 

void solve(){
	vector<pair<ld, ld>> v(N);
	bool special = true;
	for(int i = 0; i < N; i++){
		cin >> v[i].second >> v[i].first;
		if(v[i].first == -1) v[i].first = 1e9;
		else if(v[i].first != v[i].second) special = false;
	}
	sort(v.begin(), v.end());
	ld ans = 7e18;
	for(ld collaborators = 0; collaborators < K; collaborators++){
		vector<ld> dp(collaborators + 1, 1e18);
		dp[0] = 0;
		for(int i = 0; i < N; i++){
			for(ld j = collaborators; j >= 0; j--){
				if(j != collaborators) dp[j+1] = min(dp[j+1], dp[j] + v[i].first / (j+1.0));
				dp[j] += v[i].second / (collaborators+1.0);
			}
		}
		ans = min(ans, dp[collaborators]);
	}
	cout << fixed << setprecision(8) << ans << "\n";
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> K;
	if(K == N){
		solve();
		return 0;
	}
	vector<pair<ld, ld>> v(N);
	bool special = true;
	for(int i = 0; i < N; i++){
		cin >> v[i].second >> v[i].first;
		if(v[i].first == -1) v[i].first = 1e9;
		else if(v[i].first != v[i].second) special = false;
	}
	sort(v.begin(), v.end());
	ld ans = 7e18;
	if(special){
		for(int collaborators = 0; collaborators < K; collaborators++){
			ld cost = 0;
			ld hv = 1;
			for(int i = 0; i < collaborators; i++){
				cost += v[i].first / hv;
				hv++;
			}
			vector<ld> a;
			for(int i = collaborators; i < N; i++){
				a.push_back(v[i].second);
			}
			sort(a.begin(), a.end());
			for(int i = 0; i < K - collaborators; i++){
				cost += a[i] / hv;
			}
			ans = min(ans, cost);
		}
	}else{
		assert(false);
		for(ld collaborators = 0; collaborators < K; collaborators++){
			vector<vector<ld>> dp(K+1, vector<ld>(collaborators + 1, 1e18));
			dp[0][0] = 0;
			for(int i = 0; i < N; i++){
				for(int elem = K - 1; elem >= 0; elem--){					
					for(ld j = collaborators; j >= 0; j--){
						if(j != collaborators) dp[elem+1][j+1] = min(dp[elem+1][j+1], dp[elem][j] + v[i].first / (j+1.0));
						dp[elem+1][j] = min(dp[elem+1][j], dp[elem][j] + v[i].second / (collaborators+1.0));
					}
				}
			}
			ans = min(ans, dp[K][collaborators]);
		}
	}
	cout << fixed << setprecision(8) << ans << "\n";
}

Compilation message

Main.cpp: In function 'void solve()':
Main.cpp:11:7: warning: variable 'special' set but not used [-Wunused-but-set-variable]
   11 |  bool special = true;
      |       ^~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 4 ms 504 KB Output is correct
8 Correct 4 ms 348 KB Output is correct
9 Correct 919 ms 488 KB Output is correct
10 Correct 4 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 4 ms 504 KB Output is correct
8 Correct 4 ms 348 KB Output is correct
9 Correct 919 ms 488 KB Output is correct
10 Correct 4 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 2 ms 348 KB Output is correct
13 Correct 4 ms 496 KB Output is correct
14 Correct 3 ms 348 KB Output is correct
15 Correct 4 ms 348 KB Output is correct
16 Correct 6 ms 348 KB Output is correct
17 Correct 6 ms 348 KB Output is correct
18 Correct 927 ms 512 KB Output is correct
19 Correct 924 ms 596 KB Output is correct
20 Correct 930 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 943 ms 496 KB Output is correct
2 Correct 945 ms 600 KB Output is correct
3 Correct 984 ms 496 KB Output is correct
4 Correct 1025 ms 508 KB Output is correct
5 Correct 975 ms 500 KB Output is correct
6 Correct 966 ms 496 KB Output is correct
7 Correct 938 ms 492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 4 ms 504 KB Output is correct
8 Correct 4 ms 348 KB Output is correct
9 Correct 919 ms 488 KB Output is correct
10 Correct 4 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 2 ms 348 KB Output is correct
13 Correct 4 ms 496 KB Output is correct
14 Correct 3 ms 348 KB Output is correct
15 Correct 4 ms 348 KB Output is correct
16 Correct 6 ms 348 KB Output is correct
17 Correct 6 ms 348 KB Output is correct
18 Correct 927 ms 512 KB Output is correct
19 Correct 924 ms 596 KB Output is correct
20 Correct 930 ms 348 KB Output is correct
21 Runtime error 1 ms 600 KB Execution killed with signal 6
22 Halted 0 ms 0 KB -