이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
template <class X, class Y>
bool cmin(X &a, const Y &b) {
return a > b ? a = b, 1 : 0;
}
long long min_total_length
(vector <int> R, vector<int> B) {
vector <pair <int, int>> P;
int N = R.size(), M = B.size();
for (int i = 0, j = 0; i < N || j < M; ) {
if (i < N && j < M) {
if (R[i] < B[j])
P.emplace_back(R[i++], 0);
else P.emplace_back(B[j++], 1);
} else if (i < N) {
P.emplace_back(R[i++], 0);
} else {
P.emplace_back(B[j++], 1);
}
}
vector <long long> S(N + M + 1), cur, nxt;
for (int i = 0; i + 1 < N + M; i++)
if (P[i].se != P[i + 1].se) {
cur.assign(i + 2, 1e18); break;
}
for (int i = 0; i < N + M; i++)
S[i + 1] = S[i] + P[i].fi;
cur.back() = 0;
for (int i = 0; i + 1 < N + M; i++)
if (P[i].se != P[i + 1].se) {
int j = i + 1;
while (j < N + M && P[j].se != P[i].se) j++;
nxt.assign(j - i, 1e18);
for (int l = cur.size() - 1; l > 0; l--)
cmin(cur[l - 1], cur[l] + P[i + 1].fi - P[i - l + 1].fi);
for (int l = min(int(cur.size()), j - i) - 1; l >= 0; l--)
cmin(nxt[j - i - 1 - l], cur[l] + S[i + l + 1] + S[i - l + 1] - S[i + 1] * 2);
for (int l = j - i - 1; l > 0; l--)
cmin(nxt[l - 1], nxt[l] + P[j - l].fi - P[i].fi);
cur.swap(nxt);
}
return cur[0];
}
# | 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... |