Submission #313253

#TimeUsernameProblemLanguageResultExecution timeMemory
313253talant117408전선 연결 (IOI17_wiring)C++17
100 / 100
157 ms19064 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <ll, ll> pii; #define precision(n) fixed << setprecision(n) #define pb push_back #define ub upper_bound #define lb lower_bound #define mp make_pair #define eps (double)1e-9 #define PI 2*acos(0.0) #define endl "\n" #define sz(v) (int)(v).size() #define all(v) v.begin(),v.end() #define rall(v) v.rbegin(),v.rend() #define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); const int N = 2e5+7; ll dp[N], pref[N]; map <ll, ll> last; vector <pii> r, b, all; ll nearest(pii p){ ll mn = 9e18; if(p.second){ auto it = lb(all(r), p); if(it != r.end()){ mn = (*it).first-p.first; } if(it != r.begin()){ it--; mn = min(mn, p.first-(*it).first); } } else{ auto it = lb(all(b), p); if(it != b.end()){ mn = (*it).first-p.first; } if(it != b.begin()){ it--; mn = min(mn, p.first-(*it).first); } } return mn; } ll min_total_length(vector<int> R, vector<int> B){ all.pb(mp(0, 0)); for(auto to : R) all.pb(mp(to, 0)), r.pb(mp(to, 0)); for(auto to : B) all.pb(mp(to, 1)), b.pb(mp(to, 1)); sort(all(all)); int n = sz(all)-1, cnt = 0, i; last[0] = dp[0] = 0; for(i = 1; i <= n; i++){ pref[i] = pref[i-1] + ((all[i].second ? -all[i].first : all[i].first)); cnt += all[i].second ? -1 : 1; dp[i] = dp[i-1]+nearest(all[i]); if(cnt == 0 || last[cnt] > 0){ dp[i] = min(dp[i], dp[last[cnt]]+abs(pref[i]-pref[last[cnt]])); } last[cnt] = i; } 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...