1 条题解

  • 0
    @ 2023-10-18 1:07:26

    题解来自洛谷网友

    首先,先证明一个结论。 image代码实现:

    #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
    上传者