题目描述
小 A 有 nnn 个糖果盒,第 iii 个盒中有 aia_iai 颗糖果。
小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 xxx,至少得吃掉几颗糖。
输入格式
输入的第一行是两个用空格隔开的整数,代表糖果盒的个数 nnn 和给定的参数 xxx。
第二行有 nnn 个用空格隔开的整数,第 iii 个整数代表第 iii 盒糖的糖果个数 aia_iai。
输出格式
输出一行一个整数,代表最少要吃掉的糖果的数量。
输入输出样例
输入 #1
3 3
2 2 2
输出 #1
1
输入 #2
6 1
1 6 1 2 0 4
输出 #2
11
输入 #3
5 9
3 1 4 1 5
输出 #3
0
说明/提示
样例输入输出 1 解释
吃掉第 2 盒中的一个糖果即可。
样例输入输出 2 解释
第 2 盒糖吃掉 666 颗,第 4 盒吃掉 222 颗,第 6 盒吃掉 333 颗。
数据规模与约定
对于 30%30\%30% 的数据,保证 n≤20n \leq 20n≤20,ai,x≤100a_i, x \leq 100ai,x≤100。
对于 70%70\%70% 的数据,保证 n≤103n \leq 10^3n≤103,ai,x≤105a_i, x \leq 10^5ai,x≤105。
对于 100%100\%100% 的数据,保证 2≤n≤1052 \leq n \leq 10^52≤n≤105,0≤ai,x≤1090 \leq a_i, x \leq 10^90≤ai,x≤109。
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int a[(int)1e6];
int main() {
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++) {
cin >> a[i];
}
long long ans = 0;
for(int i= 1; i < n; i++) {
ll sum = a[i] + a[i - 1];
if(sum > m) {
a[i] -= sum - m;
ans += sum - m;
}
}
cout << ans << endl;
return 0;
}