제출 #1042399

#제출 시각아이디문제언어결과실행 시간메모리
1042399Math4Life2020Palembang Bridges (APIO15_bridge)C++17
22 / 100
30 ms5076 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long; using pii = pair<ll,ll>;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
	ll K,N; cin >> K >> N;
	vector<pii> v;
	ll ans = 0;
	for (ll i=0;i<N;i++) {
		string p,q; ll s,t;
		cin >> p >> s >> q >> t;
		if (p==q) {
			ans += abs(s-t);
		} else {
			ans++;
			v.push_back({min(s,t),max(s,t)});
		}
	}
	vector<ll> v2;
	for (pii p0: v) {
		v2.push_back(p0.first);
		v2.push_back(p0.second);
	}
	if (K==1) {
		sort(v2.begin(),v2.end());
		for (ll x: v2) {
			ans += abs(x-v2[v2.size()/2]);
		}
		cout << ans; exit(0);
	}
	ll emin = 1e18;
	for (ll a: v2) {
		ll ec = 0;
		priority_queue<pii> PQ; //-pos,sign(+1/-1)
		for (pii p0: v) {
			ll x = p0.first; ll y = p0.second;
			ec += abs(a-x)+abs(a-y);
			if (a<x || a>y) {
				PQ.push({-a,-1});
				PQ.push({-x,1});
				PQ.push({-y,1});
				PQ.push({-x-y+a,-1});
			}
		}
		ll xmin = 1e18;
		ll sp=0; ll sn=0;
		while (!PQ.empty()) {
			pii p0 = PQ.top(); PQ.pop();
			ll p = -p0.first; ll n = p0.second;
			xmin = min(xmin,(p*sn-sp));
			sp += p*n; sn += n;
		}
		emin = min(emin,2*xmin+ec);
	}
	cout << (emin+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...