제출 #805374

#제출 시각아이디문제언어결과실행 시간메모리
805374nononoPalembang Bridges (APIO15_bridge)C++14
100 / 100
225 ms16112 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int INF = 1e18; const int mxN = 1e5 + 10; int n, k; char p[mxN], q[mxN]; int s[mxN], t[mxN]; namespace full { multiset<int> L, R; int sumL = 0, sumR = 0; int f1[mxN], f2[mxN]; int calc() { int tmp = INF; if(L.size() > 0) { int l = *(-- L.end()); tmp = min(tmp, l * (long long)L.size() - sumL + sumR - l * (long long)R.size()); } if(R.size() > 0) { int r = *R.begin(); tmp = min(tmp, r * (long long)L.size() - sumL + sumR - r * (long long)R.size()); } return tmp; } void add(int x) { if(L.size() > 0 && *(-- L.end()) > x) { sumL += x; L.insert(x); } else { sumR += x; R.insert(x); } while(L.size() > R.size() + 1) { sumR += *(-- L.end()); R.insert(*(-- L.end())); sumL -= *(-- L.end()); L.erase(-- L.end()); } while(R.size() > L.size()) { sumL += *R.begin(); L.insert(*R.begin()); sumR -= *R.begin(); R.erase(R.begin()); } } void solve() { int sum = 0; vector<int> ar; for(int i = 1; i <= n; i ++) { if(p[i] == q[i]) sum += abs(s[i] - t[i]); else { ar.push_back(i); } } sort(ar.begin(), ar.end(), [&](const int &x, const int &y) { return s[x] + t[x] < s[y] + t[y]; }); for(int i = 0; i < ar.size(); i ++) { int id = ar[i]; add(s[id]); add(t[id]); f1[i] = calc(); } L.clear(); R.clear(); sumL = 0; sumR = 0; for(int i = ar.size() - 1; i >= 0; i --) { int id = ar[i]; add(s[id]); add(t[id]); f2[i] = calc(); } int result = INF; if(k >= 1) result = min({result, f1[ar.size() - 1], f2[0]}); if(k >= 2) { for(int i = 0; i + 1 < ar.size(); i ++) { result = min(result, f1[i] + f2[i + 1]); } } cout << sum + result + ar.size() << "\n"; } } signed main() { cin.tie(0)->sync_with_stdio(0); cin >> k >> n; for(int i = 1; i <= n; i ++) cin >> p[i] >> s[i] >> q[i] >> t[i]; full::solve(); return 0; }

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

bridge.cpp: In function 'void full::solve()':
bridge.cpp:76:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |         for(int i = 0; i < ar.size(); i ++) {
      |                        ~~^~~~~~~~~~~
bridge.cpp:98:34: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |             for(int i = 0; i + 1 < ar.size(); 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...