Submission #771090

#TimeUsernameProblemLanguageResultExecution timeMemory
771090_martynasWiring (IOI17_wiring)C++11
100 / 100
39 ms7100 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; #define F first #define S second #define PB push_back using pii = pair<int, int>; using ll = long long; ll min_total_length(vector<int> R, vector<int> B) { vector<pii> A; for(int x : R) A.PB({x, 0}); for(int x : B) A.PB({x, 1}); sort(A.begin(), A.end()); int n = A.size(); A.insert(A.begin()+0, pii{0, 0}); vector<ll> dp(n+1, (ll)1e18); dp[0] = 0; int last_l, last_r; for(int r = 1; r <= n; r++) { int l = r; while(r < n && A[r+1].S == A[l].S) r++; if(l != 1) { for(int i = last_l; i <= last_r; i++) { dp[i] = min(dp[i], dp[i-1]+A[l].F-A[i].F); } ll cost = 0; for(int k = 0; k <= min(last_r-last_l, r-l); k++) { cost += A[l+k].F-A[last_r-k].F; dp[l+k] = min(dp[l+k], dp[last_r-k-1]+cost); } for(int i = l; i <= r; i++) { dp[i] = min(dp[i], dp[i-1]+A[i].F-A[last_r].F); } } last_l = l, last_r = r; } 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...