Submission #897782

#TimeUsernameProblemLanguageResultExecution timeMemory
897782aqxaBoxes with souvenirs (IOI15_boxes)C++17
100 / 100
477 ms294004 KiB
#include <bits/stdc++.h>
using namespace std;
 
using ll = long long; 

const int N = 1e7 + 10; 

#include "boxes.h"

ll ans0[N], ans1[N]; 

long long delivery(int n, int k, int m, int p[]) {
	for (int i = 0; i < n; ++i) {
		if (i < k) {
			ans0[i] = p[i] + min(p[i], m - p[i]); 
			ans1[n - 1 - i] = (ll) m - p[n - 1 - i] + min((ll)p[n - 1 - i], (ll)m - p[n - 1 - i]); 
		} else {
			ans0[i] = ans0[i - k] + p[i] + min(p[i], m - p[i]); 
			ans1[n - 1 - i] = ans1[n - 1 - i + k] + (ll) m - p[n - 1 - i] + min((ll)p[n - 1 - i], (ll)m - p[n - 1 - i]); 
		}
	}
	ll ans = ans0[n - 1]; 
	ans = min(ans, ans1[0]); 
	for (int i = 0; i < n - 1; ++i) {
		ans = min(ans, ans0[i] + ans1[i + 1]); 
	}

    return ans;
}

 
 
// int32_t main() {
// 	ios::sync_with_stdio(false);
// 	cin.tie(nullptr);
 
// 	int n, k, m; 
// 	cin >> n >> k >> m; 
// 	int pos[n]; 
// 	for (int i = 0; i < n; ++i) {
// 		cin >> pos[i]; 
// 	}
// 	cout << "answer: " << delivery(n, k, m, pos) << "\n";
 
// 	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...