이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;
// macros
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ll, ll> lll;
typedef tuple<int, int, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
typedef vector<lll> vlll;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define RE(a,c) REP(a,0,c)
#define RE1(a,c) REP(a,1,c+1)
#define REI(a,b,c) REP(a,b,c+1)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define FOR(a,b) for(auto& a : b)
#define all(a) a.begin(), a.end()
#define EPS 1e-9
#define pb push_back
#define popb pop_back
#define fi first
#define se second
#define sz size()
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
const ll INF = 1e18;
ll n, c;
vll l, d;
bool possible(ll dist) {
ll minSum=0, maxSum=INF, minDif=0, maxDif=INF;
RE(i,n) RE(j,i) {
ll curDist = d[i]+d[j]+l[i]-l[j];
if(curDist <= dist) continue;
ll over = dist - d[i] - d[j] - c;
minDif = max(minDif, l[i]-l[j]-over);
maxDif = min(maxDif, l[i]-l[j]+over);
minSum = max(minSum, l[i]+l[j]-over);
maxSum = min(maxSum, l[i]+l[j]+over);
}
REP(i,1,n) {
int j1 = 0, j2 = 0;
ll curDif, curSum;
while(j1+1 < i) {
curDif = l[i]-l[j1];
if(curDif > maxDif)
j1++;
else
break;
}
while(j2+1 < i) {
curSum = l[i]+l[j2];
if(curSum < minSum)
j2++;
else
break;
}
curDif = l[i]-l[j1];
curSum = l[i]+l[j1];
if(minDif <= curDif && curDif <= maxDif && minSum <= curSum && curSum <= maxSum)
return true;
curDif = l[i]-l[j2];
curSum = l[i]+l[j2];
if(minDif <= curDif && curDif <= maxDif && minSum <= curSum && curSum <= maxSum)
return true;
}
return false;
}
ll find_shortcut(int n_, vi l_, vi d_, int c_) {
n = n_; c=c_;
l.pb(0);
FOR(i,l_)
l.pb(i);
FOR(i,d_) d.pb(i);
REP(i,1,n) l[i]+=l[i-1];
ll lb=0, ub=INF;
while(lb != ub) {
ll mid=(lb+ub)/2;
if(possible(mid)) ub=mid;
else lb=mid+1;
}
return lb;
}
# | 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... |