이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define oo ll(1e15)
#define maxn 100005
using namespace std;
typedef long long ll;
int n, k;
vector < pair < int, int > > L;
ll a[maxn], b[maxn];
void calc(vector < pair < int, int > >& L, ll a[]){
multiset < int > s;
s.clear();
ll sum = 0, ret = 0;
a[0] = 0;
for (int i = 1; i <= n; ++i) {
int x = L[i - 1].first, y = L[i - 1].second;
sum += x + y;
s.insert(x); ret += x;
s.insert(y); ret += y;
while (s.size() > i) {
ret -= *s.begin();
s.erase(s.begin());
}
a[i] = 2 * ret - sum;
}
}
int main(){
#define TASK "ABC"
// freopen(TASK".inp", "r", stdin); freopen(TASK".out", "w", stdout);
ios_base::sync_with_stdio(0);
ll ret = 0;
cin >> k >> n;
for (int i = 0; i < n; ++i) {
char ch1, ch2;
int x, y;
cin >> ch1 >> x >> ch2 >> y;
if (x > y) swap(x, y);
if (ch1 == ch2) {
ret += y - x;
continue;
}
L.push_back({x, y});
}
n = L.size();
sort(L.begin(), L.end(), [](pair < int, int > i, pair < int, int > j){
return i.first + i.second < j.first + j.second;
});
ll ans = oo;
calc(L, a);
reverse(L.begin(), L.end());
calc(L, b);
if (k == 1)
cout << a[n] + ret + n;
else {
for (int i = 1; i < n; ++i)
ans = min(ans, a[i] + b[n - i]);
cout << ans + ret + n;
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
bridge.cpp: In function 'void calc(std::vector<std::pair<int, int> >&, ll*)':
bridge.cpp:27:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while (s.size() > 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... |