1 条题解
-
0
题解来自洛谷网友
首先,先证明一个结论。 代码实现:
#include <bits/stdc++.h> #define int long long using namespace std; int n, k; int d, m; int t[300005]; int maxd = 0, ans = 0, uk; signed main(){ scanf("%lld%lld", &n, &k); for (int i = 1; i <= n; i++){ scanf("%lld%lld", &d, &m); t[d]+=m;maxd = max(maxd, d); } for (int i = 0; i <= maxd+1; i++){ if (i == 0){ if (t[i] <= k) ans+=t[i], t[i] = 0; else{ ans+=k, t[i]-=k; } }else{ if (t[i-1] <= k) ans+=t[i-1], uk = t[i-1], t[i-1]=0; else { ans+=k, uk = k, t[i-1]-=k;continue ; } if (t[i]<=k-uk) ans+=t[i], t[i] = 0; else ans+=k-uk, t[i]-=(k-uk); } } printf("%lld", ans); return 0; }
- 1
信息
- ID
- 191
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者