제출 #559548

#제출 시각아이디문제언어결과실행 시간메모리
559548jamezzz전선 연결 (IOI17_wiring)C++17
0 / 100
1087 ms136912 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define maxn 100005

int n,m,cnt[maxn];
vector<int> r,b;
deque<int> dq[maxn];

ll min_total_length(vector<int> _r,vector<int> _b){
	r=_r;b=_b;
	n=r.size(),m=b.size();
	if(n>m)swap(n,m),swap(r,b);
	int cur=0;
	for(int i=0;i<m;++i){
		while(cur!=n-1&&abs(b[i]-r[cur+1])<abs(b[i]-r[cur]))++cur;
		dq[cur].push_back(i);
	}
	for(int i=n-1;i>=0;--i){
		cnt[i]=cnt[i+1]+dq[i].size();
	}
	ll ans=0;
	for(int i=0;i<n;++i){
		if(dq[i].empty()){
			dq[i].push_back(dq[i+1].front());
			dq[i+1].pop_front();
		}
		else{
			for(int j=0;j<n-i-1-cnt[i+1];++j){
				dq[i+1].push_front(dq[i].back());
				dq[i].pop_back();
			}
		}
		for(int j:dq[i]){
			ans+=abs(r[i]-b[j]);
		}
	}
	return ans;
}
#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...