Submission #134818

# Submission time Handle Problem Language Result Execution time Memory
134818 2019-07-23T09:42:43 Z ckodser Shortcut (IOI16_shortcut) C++14
0 / 100
11 ms 8568 KB
// ItnoE
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 505;
int n, wlen, D[N];
ll L[N], F1[N][N], F2[N][N];
ll suff[N], pref[N];
inline ll Dist(int i, int j)
{
	return (abs(L[i] - L[j]));
}
inline ll Solve(int a, int b)
{
	ll tmpMx = 0;
	

	for (int i = 0; i < n; i ++)
		for (int j = i + 1; j < n; j ++)
			tmpMx = max(tmpMx, min({Dist(i, j), Dist(i, a) + Dist(b, j) + wlen, Dist(i, b) + Dist(a, j) + wlen}) + D[i] + D[j]);

	if (L[b] - L[a] <= wlen)
	{
		ll Mx = 0;
		for (int i = 0; i < n; i ++)
			for (int j = i + 1; j < n; j ++)
				Mx = max(Mx, L[j] - L[i] + D[i] + D[j]);
		return (Mx);
	}

	if (a > b) swap(a, b);

	ll Mx = max(pref[a], suff[b]);
	Mx = max(Mx, F2[a][0] + F1[b][n - 1] + wlen);

	{
		int val = (L[a] + L[b] + wlen) >> 1;
		int lb = upper_bound(L + a, L + b + 1, val) - L;


		if (lb > a)
			Mx = max(Mx, F2[a][0] + F1[a + 1][lb - 1] + L[a + 1] - L[a]);
		if (lb < b)
			Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
	}
	/*{
		int val = (L[a] + L[b] - wlen) >> 1;
		int lb = upper_bound(L + 1, L + n, val) - L;

		Mx = max(Mx, F1[b][n - 1] + F2[b - 1][lb] + L[b] - L[b - 1]);
		Mx = max(Mx, F1[b][n - 1] + F1[a][lb - 1] + wlen);
	}*/

	/*int r = a;
	for (int k = a; k < b; k ++)
	{
		while (r <= b && 2 * L[r] <= L[b] - L[a] + 2 * L[k] + wlen)
			r ++;
		
		if (k + 1 <= r - 1)
			Mx = max(Mx, D[k] + F1[k + 1][r - 1] + L[k + 1] - L[k]);
		if (r <= b)
			Mx = max(Mx, D[k] + L[k] - L[a] + wlen + F2[b][r]);
	}*/
	assert(Mx <= tmpMx);
	return (tmpMx);
}
int64_t find_shortcut(int _n, vector < int > _L, vector < int > _D, int _c)
{
	n = _n; wlen = _c;
	for (int i = 0; i < n - 1; i ++)
		L[i + 1] = L[i] + _L[i];
	for (int i = 0; i < n; i ++)
		D[i] = _D[i];

	memset(F1, -63, sizeof(F1));
	memset(F2, -63, sizeof(F2));
	for (int i = 0; i < n; i ++)
	{
		F1[i][i] = D[i];
		for (int j = i + 1; j < n; j ++)
			F1[i][j] = max(F1[i][j - 1], D[j] + L[j] - L[i]);
	}
	for (int i = n - 1; i >= 0; i --)
	{
		F2[i][i] = D[i];
		for (int j = i - 1; j >= 0; j --)
			F2[i][j] = max(F2[i][j + 1], D[j] + L[i] - L[j]);
	}

	pref[0] = D[0];
	ll CMx = D[0];
	for (int i = 1; i < n; i ++)
	{
		CMx += L[i] - L[i - 1];
		pref[i] = max(pref[i - 1], CMx + D[i]);
		CMx = max(CMx, (ll)D[i]);
	}
	suff[n - 1] = D[n - 1];
	CMx = D[n - 1];
	for (int i = n - 2; i >= 0; i --)
	{
		CMx += L[i + 1] - L[i];
		suff[i] = max(suff[i + 1], CMx + D[i]);
		CMx = max(CMx, (ll)D[i]);
	}

	ll Mn = Solve(0, 0);

	for (int i = 0; i < n; i ++)
		for (int j = i + 1; j < n; j ++)
			Mn = min(Mn, Solve(i, j));
	return (Mn);
}
/*int main()
{
	int nn = 5;
	int cc = 0;
	vector < int > LL = {20, 20, 40, 20};
	vector < int > DD = {390, 5, 400, 400, 390};
	ll Mn = find_shortcut(nn, LL, DD, cc);
	printf("%lld\n", Mn);
}*/

Compilation message

shortcut.cpp: In function 'int64_t find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:44:40: warning: array subscript is below array bounds [-Warray-bounds]
    Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
                            ~~~~~~~~~~~~^
shortcut.cpp:44:36: warning: array subscript is below array bounds [-Warray-bounds]
    Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
                            ~~~~~~~~^
shortcut.cpp:44:65: warning: array subscript is below array bounds [-Warray-bounds]
    Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
                                                          ~~~~~~~^
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 4344 KB n = 4, 80 is a correct answer
2 Correct 6 ms 4344 KB n = 9, 110 is a correct answer
3 Correct 5 ms 4344 KB n = 4, 21 is a correct answer
4 Correct 5 ms 4344 KB n = 3, 4 is a correct answer
5 Correct 6 ms 4344 KB n = 2, 62 is a correct answer
6 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
7 Correct 5 ms 4344 KB n = 3, 29 is a correct answer
8 Correct 5 ms 4344 KB n = 2, 3 is a correct answer
9 Correct 5 ms 4348 KB n = 2, 3 is a correct answer
10 Correct 5 ms 4344 KB n = 2, 2000000001 is a correct answer
11 Correct 5 ms 4344 KB n = 2, 3000000000 is a correct answer
12 Correct 5 ms 4344 KB n = 3, 3000000000 is a correct answer
13 Correct 6 ms 4344 KB n = 3, 3000000000 is a correct answer
14 Runtime error 11 ms 8568 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -