Submission #310075

#TimeUsernameProblemLanguageResultExecution timeMemory
310075vipghn2003Wiring (IOI17_wiring)C++14
100 / 100
98 ms25192 KiB
#include<bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair using namespace std; const int N=1e5+5; vector<int>seg[N]; vector<long long>last[N],first[N],dp[N]; long long min_total_length(vector<int>r,vector<int>b) { vector<pii>coor; for(auto&x:r) coor.push_back(mp(x,0)); for(auto&x:b) coor.push_back(mp(x,1)); sort(coor.begin(),coor.end()); int cnt=0; int color=-1; seg[0].push_back(-1); for(auto&x:coor) { if(color==x.se) seg[cnt].push_back(x.fi); else { cnt++; color=x.se; seg[cnt].push_back(-1); seg[cnt].push_back(x.fi); } } for(int i=0;i<=cnt;i++) { int sz=seg[i].size(); first[i].resize(sz); last[i].resize(sz); sz--; for(int j=1;j<=sz;j++) { first[i][j]=first[i][j-1]+seg[i][j]; last[i][j]=last[i][j-1]+seg[i][sz-j+1]; } } for(int i=0;i<=cnt;i++) { int sz=seg[i].size(); dp[i].resize(sz); for(int j=0;j<sz;j++) dp[i][j]=1e15; } dp[0][0]=0; for(int i=0;i<cnt;i++) { int sz_prev=seg[i].size()-1; int sz_cur=seg[i+1].size()-1; for(int j=sz_prev;j>0;j--) { dp[i][j-1]=min(dp[i][j-1],dp[i][j]+abs(seg[i][sz_prev-j+1]-seg[i+1][1])); } for(int j=0;j<=min(sz_cur,sz_prev);j++) { dp[i+1][sz_cur-j]=min(dp[i+1][sz_cur-j],dp[i][j]+abs(last[i][j]-first[i+1][j])); } for(int j=sz_cur;j>0;j--) { if(i==0) break; dp[i+1][j-1]=min(dp[i+1][j-1],dp[i+1][j]+abs(seg[i+1][sz_cur-j+1]-seg[i].back())); } } return dp[cnt][0]; } /* int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m; cin>>n>>m; vector<int>r(n),b(m); for(int i=0;i<n;i++) cin>>r[i]; for(int i=0;i<m;i++) cin>>b[i]; cout<<min_total_length(r,b); }*/ /* 4 5 1 2 3 7 0 4 5 9 10 */
#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...