이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |