贪心:第一个糖果盒和第二个糖果盒超出x时,吃掉第二个糖果盒中的糖果,因为第一个糖果盒只有1组(12),第二个糖果盒有两组(12和23)。所以作者用了两个指针,每比较完一组向后移一位。
注意:开long long!特殊情况:第二个糖果盒有可能会被减成负数!
#include<iostream>
#include<vector>
using namespace std;
int main() {
long long n, x;
cin >> n >> x;
vector<long long> a(n + 1);
for (long long i = 1; i <= n; i++)cin >> a[i];
long long count = 0;
long long p1 = 1;
long long p2 = 2;
while (p2 <= n) {
if (a[p1] + a[p2] > x) {
if (a[p2] > 0) {
count += a[p1] + a[p2] - x;
a[p2] -= a[p1] + a[p2] - x;
}
else {
count += a[p1] + a[p2] - x;
a[p1] -= a[p1] + a[p2] - x;
}
}
p1++;
p2++;
}
cout << count << endl;
return 0;
}