1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(0); int N, S; cin >> N >> S; vector<pair<ll, int>> events; ll sum_d = 0; for (int i = 0; i < N; ++i) { ll H, V; cin >> H >> V; ll d = abs(H); sum_d += d; if (d < S) { events.push_back({V - S, 1}); events.push_back({V - d, -2}); events.push_back({V, 2}); events.push_back({V + d, -2}); events.push_back({V + S, 1}); } else { events.push_back({V - d, -1}); events.push_back({V, 2}); events.push_back({V + d, -1}); } } sort(events.begin(), events.end()); // 合并相同坐标的事件 vector<pair<ll, int>> merged; for (auto &e : events) { if (merged.empty() || merged.back().first != e.first) { merged.push_back(e); } else { merged.back().second += e.second; } } const ll L = -4000000000LL; // 足够小的初始位置 ll prev_x = L; ll f = sum_d; ll A = 0; ll ans = f; for (auto &e : merged) { ll x = e.first; int delta = e.second; f += A * (x - prev_x); if (f < ans) ans = f; A += delta; prev_x = x; } cout << ans << endl; return 0; }
- 1
信息
- ID
- 10554
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者