제출 #1203752

#제출 시각아이디문제언어결과실행 시간메모리
1203752onbert전선 연결 (IOI17_wiring)C++20
0 / 100
0 ms328 KiB
#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] = {0, 0};
    int lasta = -INF, lastb = -INF, last = 0, val = 0, sum = 0;
    int start = max(a[0], b[0]);
    for (auto [i, del]:vec) {
        val += del;
        sum += del * i;
        if (i < start) {
            last += start - i;
            continue;
        }
        int cur;
        if (start == i) {
            cur = last;
        } else if (del == 1) {
            cur = min(last + i - lasta, dp[val + n].first + abs(sum - dp[val + n].second));
            lastb = i;
        } else {
            cur = min(last + 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...