답안 #114655

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
114655 2019-06-02T07:27:09 Z E869120 Shortcut (IOI16_shortcut) C++14
0 / 100
2000 ms 932 KB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

// O(N^3) Solution [[38 pts]]

long long N, C, D[3009][3009], A[3009], B[3009], dp[3009];
long long BB[6009], L[6009], LL[6009], L2[6009];

long long solve_in(int cl, int cr) {
	for (int i = cl; i < cr; i++) { L[i - cl] = A[i]; BB[i - cl] = B[i]; } L[cr - cl] = C; BB[cr - cl] = B[cr];
	int M = (cr - cl + 1);
	for (int i = 0; i <= M * 2; i++) LL[i + 1] = LL[i] + L[i % M];
	for (int i = 0; i <= M * 2; i++) L2[i] = LL[i] + BB[i % M];
	
	//printf("LL : "); for (int i = 0; i <= M * 2; i++) printf("% 4lld", LL[i]); printf("\n");
	//printf("L2 : "); for (int i = 0; i <= M * 2; i++) printf("% 4lld", L2[i]); printf("\n");
	long long maxn = 0; for (int i = cl; i <= cr; i++) maxn = max(maxn, B[i]);
	
	int cx = 0; deque<pair<long long, int>> vec;
	for (int i = 0; i < M; i++) {
		while (LL[cx] - LL[i] <= (LL[M] / 2)) {
			while (!vec.empty() && vec[vec.size() - 1].first <= L2[cx]) vec.pop_back();
			vec.push_back(make_pair(L2[cx], cx));
			cx++;
		}
		if (vec.front().second == i) vec.pop_front();
		if (!vec.empty()) {
			//printf("i = %d, cx = %d, right = %d, left = %d\n", i, cx, (int)vec.front().first, (int)(LL[i] - BB[i]));
			maxn = max(maxn, vec.front().first - (LL[i] - BB[i]));
		}
	}
	return maxn;
}

long long solve_out(int cl, int cr) {
	long long el = 0, er = 0;
	long long sl = 0; for (int i = cl - 1; i >= 0; i--) { sl += A[i]; el = max(el, sl + B[i]); }
	long long sr = 0; for (int i = cr; i < N - 1; i++) { sr += A[i]; er = max(er, sr + B[i + 1]); }
	long long maxn = 0;
	for (int i = cl; i <= cr; i++) {
		maxn = max(maxn, el + B[i] + min(D[cl][i], D[cl][cr] + C - D[cl][i]));
		maxn = max(maxn, er + B[i] + min(D[cr][i], D[cl][cr] + C - D[cr][i]));
	}
	maxn = max(maxn, el + er + min(C, D[cl][cr]));
	return maxn;
}

long long find_shortcut2(int n, vector<int>l, vector<int>f, int c) {
	long long ans = (1LL << 60);
	for (int u = 0; u < n; u++) {
		for (int v = u + 1; v < n; v++) {
			vector<vector<long long>> d(n * 2, vector<long long>(n * 2, (1LL<<60)));
			for (int k = 0; k < n * 2; k++) d[k][k] = 0;
			for (int k = 0; k < n - 1; k++) { d[k][k + 1] = l[k]; d[k + 1][k] = l[k]; }
			for (int k = 0; k < n; k++) { d[k][k + n] = f[k]; d[k + n][k] = f[k]; }
			d[u][v] = min(d[u][v], 1LL * c); d[v][u] = min(d[v][u], 1LL * c);
			
			for (int k = 0; k < n * 2; k++) {
				for (int i = 0; i < n * 2; i++) {
					for (int j = 0; j < n * 2; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
				}
			}
			
			long long rem = 0; for (int i = 0; i < n * 2; i++) { for (int j = 0; j < n * 2; j++) rem = max(rem, d[i][j]); }
			ans = min(ans, rem);
		}
	}
	return ans;
}

long long find_shortcut(int n, vector<int> l, vector<int> d, int c) {
	return find_shortcut2(n, l, d, c);
	
	//---
	
	N = n; C = c;
	for (int i = 0; i < N; i++) { if (i < N - 1) A[i] = l[i]; B[i] = d[i]; }
	for (int i = 0; i < N; i++) {
		long long S = 0;
		for (int j = i + 1; j < N; j++) {
			S += 1LL * l[j - 1];
			D[i][j] = S; D[j][i] = S;
		}
	}
	
	long long ans = (1LL << 60);
	for (int i = 0; i < N; i++) {
		for (int j = i + 1; j < N; j++) {
			long long V1 = solve_in(i, j);
			long long V2 = solve_out(i, j);
			//cout << "u = " << i << ", v = " << j << ", V1 = " << V1 << ", V2 = " << V2 << ", ans = " << max(V1, V2) << endl;
			ans = min(ans, max(V1, V2));
		}
	}
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 256 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 256 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 2 ms 256 KB n = 2, 3 is a correct answer
10 Correct 2 ms 256 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 256 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 256 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 256 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 256 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 256 KB n = 10, 1000000343 is a correct answer
18 Correct 4 ms 256 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 256 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Correct 3 ms 384 KB n = 10, 117 is a correct answer
24 Correct 2 ms 384 KB n = 10, 336 is a correct answer
25 Correct 2 ms 384 KB n = 10, 438 is a correct answer
26 Correct 2 ms 256 KB n = 10, 206 is a correct answer
27 Correct 3 ms 384 KB n = 10, 636 is a correct answer
28 Correct 2 ms 256 KB n = 4, 2399 is a correct answer
29 Correct 2 ms 256 KB n = 10, 10992 is a correct answer
30 Correct 2 ms 384 KB n = 10, 3112 is a correct answer
31 Execution timed out 2057 ms 932 KB Time limit exceeded
32 Halted 0 ms 0 KB -