제출 #386820

#제출 시각아이디문제언어결과실행 시간메모리
386820wenqiPalembang Bridges (APIO15_bridge)C++14
0 / 100
2 ms492 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) begin(x), end(x) #define fillc(p, t, v) fill_n((t*) p, sizeof(p) / sizeof(t), v) #define pb push_back #define f first #define s second int K, N; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> K >> N; ll base = 0; vector<pair<ll, ll>> segs; for(int i = 0; i < N; i++) { char a, b; int x, y; cin >> a >> x >> b >> y; if(x > y) swap(x, y); if(a == b) { base += y - x; }else{ base += y - x + 1; segs.pb({x, y}); } } sort(all(segs)); vector<pair<ll, ll>> es; for(auto s : segs) es.pb({s.f, 0}), es.pb({s.s, 1}); sort(all(es)); auto D = es; D[D.size() - 1] = {0, 0}; for(int i = es.size() - 2; i >= 0; i--) { D[i] = D[i + 1]; if(es[i].s == 0) { D[i].f++; D[i].s += es[i].f; } } ll k = 0; ll n = 0; ll l = 0; ll ans = INT64_MAX; int i = 0; for(auto p : es) { k += 2 * n * (p.f - l); if(p.s == 0) { ll hm = k + 2 * (D[i].s - p.f * D[i].f); ans = min(ans, hm); }else{ n++; } l = p.f; i++; } cout << base + ans << '\n'; return 0; }
#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...