This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shortcut.h"
#include <vector>
#include <iostream>
using namespace std;
using ll = long long;
using vll = vector<ll>;
const ll INF = 1'000'000'000'000'000'000LL;
ll find_shortcut(int n, vector<int> track_len, vector<int> d, int c)
{
vll x(n, 0);
for(int i = 1; i < n; i++) x[i] = x[i-1] + track_len[i-1];
ll lo = 1;
ll hi = 1'000'000'000'000'000'000LL;
vll y(n, 0);
for(int i = 0; i < n; i++) y[i] = d[i];
ll l = c;
while(lo != hi)
{
ll k = (lo+hi)/2;
ll sum_lo = -INF;
ll sum_hi = INF;
ll diff_lo = -INF;
ll diff_hi = INF;
for(int i = 0; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
if(y[i] + y[j] + x[j] - x[i] <= k) continue;
sum_lo = max(sum_lo, (x[i] + y[i]) + (x[j] + y[j]) + l - k);
sum_hi = min(sum_hi, (x[i] - y[i]) + (x[j] - y[j]) + k - l);
diff_hi = min(diff_hi, -(x[i] + y[i]) + (x[j] - y[j]) + k - l);
diff_lo = max(diff_lo, -(x[i] - y[i]) + (x[j] + y[j]) + l - k);
}
}
bool works = 0;
for(int i = 0; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
if(sum_lo <= x[i] + x[j] && x[i] + x[j] <= sum_hi)
{
if(diff_lo <= x[j] - x[i] && x[j] - x[i] <= diff_hi)
{
works = 1;
}
}
}
}
if(works) hi = k;
else lo = k+1;
}
return lo;
}
# | 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... |