제출 #1006144

#제출 시각아이디문제언어결과실행 시간메모리
1006144thangdz2k7Wiring (IOI17_wiring)C++17
100 / 100
32 ms8640 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; const int inf = 1e9; int n; long long dp[N], pre[N]; pair <int, int> p[N]; long long min_total_length(vector <int> r, vector <int> b){ for (auto &i : r) p[++ n] = {i, 0}; for (auto &i : b) p[++ n] = {i, 1}; sort(p + 1, p + n + 1); p[0] = {-inf, 1 - p[1].second}; for (int i = 1; i <= n; ++ i) pre[i] = pre[i - 1] + p[i].first; for (int last = 1, i = 1; i <= n; ++ i){ int j = i; while (j < n && p[j].second == p[j + 1].second) ++ j; for (int k = last; k < i; ++ k) dp[k] = min(dp[k], dp[k - 1] + p[i].first - p[k].first); long long Min = dp[i - 1], sum = 0; for (int k = i; k <= j; ++ k){ sum += p[k].first - p[i - 1].first; int vc = i * 2 - k - 1; if (vc >= last){ Min = min(Min, dp[vc - 1] + 1ll * p[i - 1].first * (i - vc) - pre[i - 1] + pre[vc - 1]); } dp[k] = Min + sum; } last = i; i = j; } return dp[n]; }
#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...