#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;
int n, c;
vector<int> l, d;
vector<long long> sum;
bool check(long long lim) {
pair<long long, long long> xpy = {-1e18, 1e18}, xmy = {-1e18, 1e18};
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (d[i] + d[j] + sum[j] - sum[i] <= lim) continue;
long long a = lim - c - d[i] - d[j];
xpy.first = max(xpy.first, sum[i] + sum[j] - a);
xpy.second = min(xpy.second, sum[i] + sum[j] + a);
xmy.first = max(xmy.first, sum[i] - sum[j] - a);
xmy.second = min(xmy.second, sum[i] - sum[j] + a);
}
}
for (int p = 0; p < n; p++) {
for (int q = 0; q < n; q++) {
if (p == q) continue;
if (xpy.first <= sum[p] + sum[q] && sum[p] + sum[q] <= xpy.second) {
if (xmy.first <= sum[p] - sum[q] && sum[p] - sum[q] <= xmy.second) {
return true;
}
}
}
}
return false;
}
long long find_shortcut(int _n, vector<int> _l, vector<int> _d, int _c) {
n = _n;
l = _l;
d = _d;
c = _c;
sum.resize(n);
sum[0] = 0;
for (int i = 1; i < n; i++) {
sum[i] = sum[i-1] + l[i-1];
}
long long st = c, ed = 1e18;
while (st < ed) {
long long mid = (st + ed) / 2;
if (check(mid)) ed = mid;
else st = mid + 1;
}
return st;
}
Compilation message (stderr)
shortcut.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
shortcut_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |