Submission #588392

#TimeUsernameProblemLanguageResultExecution timeMemory
588392TemmieBoxes with souvenirs (IOI15_boxes)C++17
10 / 100
1 ms308 KiB
#include "boxes.h"
#include <bits/stdc++.h>

long long dist(long long place, int L) {
	return std::min(place, (long long) L - place);
}

struct Range {
	int l, r;
	long long get(int L, int pos[]) {
		return
		llabs((long long) pos[l] - (long long) pos[r]) +
		dist(pos[l], L) + dist(pos[r], L);
	}
};

long long delivery(int n, int k, int L, int pos[]) {
	std::sort(pos, pos + n);
	std::vector <Range> range((n + k - 1) / k);
	long long ans = 0;
	for (int i = 0; i < (n + k - 1) / k; i++) {
		int l = i * k;
		int r = std::min(l + k - 1, n - 1);
		range[i] = { l, r };
		ans += range[i].get(L, pos);
	}
	for (int i = 0; i <= k; i++) {
		long long now = 0;
		for (Range& ran : range) {
			ran.l++;
			ran.r++;
			ran.l %= n;
			ran.r %= n;
			now += ran.get(L, pos);
		}
		ans = std::min(ans, now);
	}
	return ans;
}

//int main() {
	//int a[3] = { 1, 2, 5 };
	//std::cout << delivery(3, 2, 8, a) << std::endl;
//}
#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...