Submission #1301834

#TimeUsernameProblemLanguageResultExecution timeMemory
1301834nicolo_010Boxes with souvenirs (IOI15_boxes)C++20
15 / 100
2095 ms580 KiB
#include <bits/stdc++.h>
#include "boxes.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int mxN = 1005;

vector<int> pos;

int l, k, n;

ll solve(vector<int> &p) {
	int idx=0;
	int cnt=0;
	ll ans=0;
	for (int i=0; i<n; i++) {
		int a = p[i];
		int cost;
		if (idx <= pos[a]) cost = pos[a]-idx;
		else cost = idx+pos[a];
		if (idx >= pos[a]) cost = min(cost, idx-pos[a]);
		else cost = min(cost, idx+l-pos[a]);
		//cout << i << " " << idx << " " << a << " " << pos[a] << " " << cost << endl;
		cnt++;
		ans += cost;
		idx = pos[a];
		if (cnt==k) {
			cnt=0;
			ans += min(idx, l-idx);
			idx = 0;
		}
	}
	return ans+min(idx, l-idx);
}

ll delivery(int N, int K, int L, int* a) {
	n = N;
	k = K;
	l = L;
	pos.assign(n, 0);
	for (int i=0; i<n; i++) {
		pos[i] = a[i];
	}
	ll ans=1e18;
	vector<int> p(n);
	for (int i=0; i<n; i++) p[i] = i;
	ans = solve(p);
	//cout << endl;
	while (next_permutation(p.begin(), p.end())) {
		ans = min(ans, solve(p));
	}
	return ans;
}
#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...