답안 #765744

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
765744 2023-06-25T04:25:41 Z SanguineChameleon Shortcut (IOI16_shortcut) C++17
0 / 100
1 ms 308 KB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 20;
long long len[maxn];
int depth[maxn];
int n, c;

bool check(long long lim) {
	for (int x = 1; x <= n; x++) {
		for (int y = x + 1; y <= n; y++) {
			bool ok = true;
			for (int i = 1; i <= n && ok; i++) {
				for (int j = i + 1; j <= x && ok; j++) {
					if (len[j] - len[i] + depth[i] + depth[j] > lim) {
						ok = false;
						break;
					}
				}
			}
			for (int i = y; i <= n && ok; i++) {
				for (int j = i + 1; j <= n && ok; j++) {
					if (len[j] - len[i] + depth[i] + depth[j] > lim) {
						ok = false;
						break;
					}
				}
			}
			for (int i = 1; i <= x && ok; i++) {
				for (int j = x + 1; j <= y && ok; j++) {
					long long d1 = len[y] - len[x] + c - (len[j] - len[x]) + len[x] - len[i] + depth[i] + depth[j];
					long long d2 = len[j] - len[i] + depth[i] + depth[j];
					if (d1 > lim && d2 > lim) {
						ok = false;
						break;
					}
				}
			}
			for (int i = x; i <= y - 1 && ok; i++) {
				for (int j = y; j <= n && ok; j++) {
					long long d1 = len[y] - len[x] + c - (len[y] - len[i]) + len[j] - len[y] + depth[i] + depth[j];
					long long d2 = len[j] - len[i] + depth[i] + depth[j];
					if (d1 > lim && d2 > lim) {
						ok = false;
						break;
					}
				}
			}
			for (int i = x; i <= y && ok; i++) {
				for (int j = i + 1; j <= y && ok; j++) {
					long long d1 = len[y] - len[x] + c - (len[j] - len[i]) + depth[i] + depth[j];
					long long d2 = len[j] - len[i] + depth[i] + depth[j];
					if (d1 > lim && d2 > lim) {
						ok = false;
						break;
					}
				}
			}
			if (ok) {
				return true;
			}
		}
	}
	return false;
}

long long find_shortcut(int _n, vector<int> _len, vector<int> _depth, int _c) {
	n = _n;
	c = _c;
	len[1] = 0;
	for (int i = 2; i <= n; i++) {
		len[i] = len[i - 1] + _len[i - 2];
	}
	for (int i = 1; i <= n; i++) {
		depth[i] = _depth[i - 1];
	}
	long long res = -1;
	long long lt = 0;
	long long rt = 1e18L;
	while (lt <= rt) {
		long long mt = (lt + rt) / 2;
		if (check(mt)) {
			res = mt;
			rt = mt - 1;
		}
		else {
			lt = mt + 1;
		}
	}
	return res;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB n = 4, 80 is a correct answer
2 Incorrect 1 ms 212 KB n = 9, incorrect answer: jury 110 vs contestant 100
3 Halted 0 ms 0 KB -