제출 #882648

#제출 시각아이디문제언어결과실행 시간메모리
882648vjudge1Palembang Bridges (APIO15_bridge)C++11
31 / 100
2079 ms13108 KiB
#include<bits/stdc++.h>
#define all(aa) aa.begin(), aa.end()
#define endl ("\n")
#define pb push_back
typedef long long ll;
const int maxn = 1e5 + 5;
using namespace std;

int n, k;
ll rem, cur, ans = LONG_LONG_MAX;
vector<pair<ll, ll>> v;
vector<ll> u;
bool ok;

ll mindist(pair<ll, ll> p, ll l, ll r){
	if( (p.first <= l && l <= p.second ) || (p.first <= r && r <= p.second) )
		return 0;
	ll ret = min(abs(l - p.first), abs(l - p.second));
	ret = min(ret, abs(r - p.first));
	ret = min(ret, abs(r - p.second));
	return 2*ret;
}

int main(){
	cin >> k >> n;
	for(int i = 0; i < n; i++){
		char c1, c2;
		int a, b;
		cin >> c1 >> a >> c2 >> b;
		if(a < b) swap(a, b);
		rem += a - b;
		if(c1 != c2){
			ok = 1;
			rem++;
			v.pb({b, a});
			u.pb(a), u.pb(b);
		}
	}
	if(!ok){
		cout << rem << endl;
		exit(0);
	}
	if(k == 2){
		sort(all(u));
		for(int l = 0; l < u.size(); l++){
			for(int r = l; r < u.size(); r++){
				cur = 0;
				for(auto p : v){
					cur += mindist(p, u[l], u[r]);
				}
				ans = min(ans, cur);
			}
		}
		cout << ans + rem << endl;
	} else{
		int n = v.size();
		cur = rem;
		ll rgt = n;
		ll lst = 0, lft = 0;
		multiset<pair<ll, ll>> come;
		multiset<ll> vs;
		vector<ll> u;
		for(int i = 0; i < n; i++){
			come.insert(v[i]);
			cur+=2*v[i].first;
			u.pb(v[i].first), u.pb(v[i].second);
		}
		sort(all(u));
		sort(all(v));
		ans = cur;
		for(int i = 0; i < 2*n; i++){
			cur += lft*2*(u[i] - lst) - rgt*2*(u[i] - lst);
			while(!come.empty() && (*come.begin()).first == u[i]){
				pair<ll, ll> p = *come.begin();
				vs.insert({p.second});
				come.erase(come.find(p));
				rgt--;
			} 
			while(!vs.empty() && *vs.begin() == u[i]){
				lft++;
				vs.erase(vs.begin());
			}
			ans = min(ans, cur);
			lst = u[i];
		}
		cout << ans << endl;
	}
	
	
}

컴파일 시 표준 에러 (stderr) 메시지

bridge.cpp: In function 'int main()':
bridge.cpp:45:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |   for(int l = 0; l < u.size(); l++){
      |                  ~~^~~~~~~~~~
bridge.cpp:46:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |    for(int r = l; r < u.size(); r++){
      |                   ~~^~~~~~~~~~
#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...