#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
int min_total_length(vector<int32_t> a, vector<int32_t> b) {
if (a.size() > b.size()) swap(a, b);
int n = a.size(), m = b.size();
vector<pair<int,int>> vec;
for (int i:a) vec.push_back({i, -1});
for (int i:b) vec.push_back({i, 1});
sort(vec.begin(), vec.end());
int sz = n+m;
pair<int,int> dp[sz];
for (int i=0;i<sz;i++) dp[i] = {INF, -INF};
dp[0 + n] = {0, 0};
int lasta = a[0], lastb = b[0], last = 0, val = 0, sum = 0;
int start = max(a[0], b[0]);
for (auto [i, del]:vec) {
val += del;
sum += i * del;
int cur;
if (del == 1) {
cur = min(last + abs(i - lasta), dp[val + n].first + abs(sum - dp[val + n].second));
lastb = i;
} else if (del == -1) {
cur = min(last + abs(i - lastb), dp[val + n].first + abs(sum - dp[val + n].second));
lasta = i;
}
dp[val + n] = {cur, sum};
last = cur;
}
return last;
}
# | 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... |