P3817 小A的糖果

题目描述

小 A 有 nn 个糖果盒,第 ii 个盒中有 a_iai 颗糖果。

小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 xx,至少得吃掉几颗糖。

输入格式

输入的第一行是两个用空格隔开的整数,代表糖果盒的个数 nn 和给定的参数 xx。

第二行有 nn 个用空格隔开的整数,第 ii 个整数代表第 ii 盒糖的糖果个数 a_iai

输出格式

输出一行一个整数,代表最少要吃掉的糖果的数量。

#include<bits/stdc++.h>
using namespace std;
int n,x,a[100001];
long long b=0;
int main(){
    cin>>n>>x;
    int i;
        for( i=1;i<=n;i++) 
    {
        cin>>a[i];
    }

    for(i=2;i<=n;i++) 
    {
        if(a[i]+a[i-1]>x)
        {
            b+=max(a[i]+a[i-1]-x,0);
        a[i]=max(x-a[i-1],0);
        }
        
    }

    cout<<b;
}

注:

if(a[i]+a[i-1]>x) 这个判断一开始我没想起来加,后来调试的时候发现不加这个判断,会导致在相邻之和小于x的时候,会补糖果补到x,再想起来在题解区有人加了这个判断,我就知道自己哪里出错了。
原文地址:https://www.cnblogs.com/lau1997/p/12594631.html