1 条题解
-
0
种树(Planting Trees) 题解
思路分析
按题目要求使用对应数据结构与算法模拟/递推求解,注意数据范围边界与时间复杂度。
参考代码
#include <iostream> #include <vector> #include <queue> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; if (!(cin >> n >> m)) return 0; vector<long long> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; if (m > n / 2) { cout << "Error!\n"; return 0; } vector<int> L(n), R(n); vector<bool> del(n, false); priority_queue<pair<long long, int>> pq; for (int i = 0; i < n; ++i) { L[i] = (i - 1 + n) % n; R[i] = (i + 1) % n; pq.push({a[i], i}); } long long ans = 0; for (int step = 0; step < m; ++step) { while (!pq.empty() && del[pq.top().second]) pq.pop(); auto [v, u] = pq.top(); pq.pop(); ans += v; int l = L[u], r = R[u]; a[u] = a[l] + a[r] - a[u]; del[l] = del[r] = true; L[u] = L[l]; R[u] = R[r]; R[L[u]] = u; L[R[u]] = u; pq.push({a[u], u}); } cout << ans << "\n"; return 0; }
- 1
信息
- ID
- 8675
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者