Submission #364053

# Submission time Handle Problem Language Result Execution time Memory
364053 2021-02-08T06:54:25 Z b23v Boxes with souvenirs (IOI15_boxes) C++14
35 / 100
2 ms 1260 KB
#include "boxes.h"

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <climits>
#include <cstring>
#include <functional>

using namespace std;

using ll = long long;
using ull = unsigned long long;
using vi = vector<int>;
using ii = pair<int,int>;
using vii = vector<pair<int,int>>;
using vb = vector<bool>;
template<typename T>
using Graph = vector<vector<T>>;

ll delivery(int n, int K, int L, int p[])
{
	ll ans = 0;
	if(K == 1) 
	{
		for(int i = 0; i < n; ++i)
		{
			ans += 2LL * min(p[i], L - p[i]);
		}
	} else if(K == n)
	{
		ans = min(1LL * L, 2LL * p[n - 1]);
		ans = min(ans, 2LL * (L - p[0]));
		for(int i = 0; i < n - 1; ++i)
		{
			ans = min(ans, 2LL * p[i] + 2LL * (L - p[i + 1]));
		}
	} else if(n <= 10)
	{
		Graph<vector<ll>> dp(1 << n, Graph<ll>(n + 1, vector<ll>(K + 1, -1)));

		function<ll(int,int,int)> run;
		run = [&run, n, K, L, p, &dp](int mask, int i, int k) -> ll
		{
	//		cerr << mask << ' ' << i << ' ' << k << '\n';
			ll pos = 0;
			if(i != n) pos = p[i];

			if(mask == 0)
			{
				return min(pos, L - pos);
			}

			ll& res = dp[mask][i][k];
			if(res != -1) return res;

			res = LONG_MAX;
			if(k == 0)
			{
				return res = min(pos, L - pos) + run(mask, n, K);
			}

			int tm = mask;
			while(tm)
			{
				int bit = tm & -tm;
				int j = __builtin_ctz(bit);
				ll d = abs(p[j] - pos);
				d = min(d, (ll)L - d);
				res = min(res, run(mask - bit, j, k - 1) + d);
				tm -= bit;
			}
			return res;
		};

		int mask = (1 << n) - 1;
		ans = run(mask, n, K);
	}
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 0 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1260 KB Output is correct
2 Correct 2 ms 1260 KB Output is correct
3 Correct 2 ms 1004 KB Output is correct
4 Correct 2 ms 1004 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 2 ms 1260 KB Output is correct
7 Correct 2 ms 1132 KB Output is correct
8 Correct 2 ms 1132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 0 ms 364 KB Output is correct
15 Correct 2 ms 1260 KB Output is correct
16 Correct 2 ms 1260 KB Output is correct
17 Correct 2 ms 1004 KB Output is correct
18 Correct 2 ms 1004 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 2 ms 1260 KB Output is correct
21 Correct 2 ms 1132 KB Output is correct
22 Correct 2 ms 1132 KB Output is correct
23 Correct 1 ms 364 KB Output is correct
24 Incorrect 1 ms 364 KB Output isn't correct
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 0 ms 364 KB Output is correct
15 Correct 2 ms 1260 KB Output is correct
16 Correct 2 ms 1260 KB Output is correct
17 Correct 2 ms 1004 KB Output is correct
18 Correct 2 ms 1004 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 2 ms 1260 KB Output is correct
21 Correct 2 ms 1132 KB Output is correct
22 Correct 2 ms 1132 KB Output is correct
23 Correct 1 ms 364 KB Output is correct
24 Incorrect 1 ms 364 KB Output isn't correct
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 0 ms 364 KB Output is correct
15 Correct 2 ms 1260 KB Output is correct
16 Correct 2 ms 1260 KB Output is correct
17 Correct 2 ms 1004 KB Output is correct
18 Correct 2 ms 1004 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 2 ms 1260 KB Output is correct
21 Correct 2 ms 1132 KB Output is correct
22 Correct 2 ms 1132 KB Output is correct
23 Correct 1 ms 364 KB Output is correct
24 Incorrect 1 ms 364 KB Output isn't correct
25 Halted 0 ms 0 KB -