Submission #1320398

#TimeUsernameProblemLanguageResultExecution timeMemory
1320398unknownNile (IOI24_nile)C++20
67 / 100
2092 ms5396 KiB
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
	int N = W.size();
	vector<pair<int, int>> info(N);
	for (int i = 0; i < N; i++) {
		info[i] = make_pair(W[i], A[i] - B[i]);
	}
	sort(info.begin(), info.end());
	vector<int> diff(N-1);
	for (int i = 0; i < N-1; i++) {
		diff[i] = info[i+1].first - info[i].first;
	}
	long long sum = accumulate(B.begin(), B.end(), 0LL);
	int Q = E.size();
	vector<long long> R(Q, sum);
	int run, min_all, min_odd, current;
	for (int j = 0; j < Q; j++) {
		run = 0;
		for (int i = 0; i < N-1; i++) {
			if (diff[i] > E[j]) {
				if ((i - run) % 2 == 0) {
					min_all = min_odd = info[run].second;
					for (int k = run; k <= i; k++){
						current = info[k].second;
						if (current < min_all and (diff[k-1]+diff[k]) <= E[j]) {
							min_all = current;
						}
						if (current < min_odd and (k-run) % 2 == 0) {
							min_odd = current;
						}
					}
					R[j] += min(min_all, min_odd);
				}
				run = i+1;
			}
		}
		if ((N-1 - run) % 2 == 0) {
			min_all = min_odd = info[run].second;
			for (int k = run; k <= N-1; k++){
				current = info[k].second;
				if (current < min_all and (diff[k-1]+diff[k]) <= E[j]) {
					min_all = current;
				}
				if (current < min_odd and (k-run) % 2 == 0) {
					min_odd = current;
				}
			}
			R[j] += min(min_all, min_odd);
		}
	}
	return R;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...