제출 #831766

#제출 시각아이디문제언어결과실행 시간메모리
831766serifefedartarPalembang Bridges (APIO15_bridge)C++17
22 / 100
89 ms13588 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define fast ios::sync_with_stdio(0);cin.tie(0);
typedef long long ll;
#define f first
#define s second
#define MOD 1000000007
#define LOGN 18
#define MAXN 200005

vector<pair<ll,ll>> seq;
int main() {
	fast
	ll K, N;
	cin >> K >> N;

	ll sum = 0;
	for (int i = 0; i < N; i++) {
		char ch1, ch2;
		ll pos1, pos2;
		cin >> ch1 >> pos1 >> ch2 >> pos2;

		if (ch1 == ch2)
			sum += abs(pos1 - pos2);
		else
			seq.push_back({min(pos1, pos2), max(pos1, pos2)});
	}
	sort(seq.begin(), seq.end(), [&](pair<int,int> a, pair<int,int> b) {
		return a.f + a.s < b.f + b.s;
	});
	sum += seq.size();

	if (seq.size() == 0) {
		cout << sum << "\n";
		return 0;
	}

	multiset<int> s1, s2;
	ll sum1 = 0, sum2 = 0;
	for (int i = 0; i < seq.size()/2; i++) {
		s1.insert(seq[i].f);
		s1.insert(seq[i].s);
		sum1 += seq[i].f + seq[i].s;
	}
	for (int i = seq.size()/2; i < (seq.size()/2) * 2; i++) {
		s2.insert(seq[i].f);
		s2.insert(seq[i].s);
		sum2 += seq[i].f + seq[i].s;
	}
	if (seq.size() % 2) {
		s1.insert(seq[seq.size()-1].f);
		s2.insert(seq[seq.size()-1].s);
		sum1 += seq[seq.size()-1].f;
		sum2 += seq[seq.size()-1].s;
	}

	while (*(--s1.end()) > *(s2.begin())) {
		s1.insert(*(s2.begin()));
		sum1 += *(s2.begin());
		sum2 -= *(s2.begin());
		s2.erase(s2.begin());
		s2.insert(*(--s1.end()));
		sum2 += *(--s1.end());
		sum1 -= *(--s1.end());
		s1.erase(s1.find(*(--s1.end())));
	}

	ll median = *(--s1.end());
	ll ans = s1.size()*median - sum1 + sum2 - s2.size()*median + sum;
	cout << ans << "\n";
}

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

bridge.cpp: In function 'int main()':
bridge.cpp:41:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |  for (int i = 0; i < seq.size()/2; i++) {
      |                  ~~^~~~~~~~~~~~~~
bridge.cpp:46:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |  for (int i = seq.size()/2; i < (seq.size()/2) * 2; i++) {
      |                             ~~^~~~~~~~~~~~~~~~~~~~
#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...