题解 P3817 【小A的糖果】
北凌scoffs
·
·
题解
#include<bits/stdc++.h>
using namespace std;
long long n,x;
long long a[1005*1005];
long long sum=0;//存储吃糖果的个数
int main() {
ios::sync_with_stdio(false);
//cin和cout没有scanf和printf效率高,why?
//因为,cin与stdin'是保持同步的
// 就是说他们可以混搭,文件指针不会乱成一锅粥
//out与stdout同理,输出不会出现顺序错乱
//怎么禁止这个特性呢?
//你只需要---ios::sync_with_stdio(false);
cin>>n>>x;
for(int i=1; i<=n; i++)
cin>>a[i];//输入数据
for(int i=1; i<=n; i++) {
if(a[i]>x) {
//这个是一个处理
//因为要求--a[i]+a[i-1]<=x,那么满足这个条件的先觉是,必须每一个盒子的糖果数都必须<=x吧
//因为我的a[i]都>x,的话,凉凉,a[i]+a[i-1}铁定>x;
sum+=a[i]-x;//至少让a[i]==x嘛,就吃掉多余的
a[i]=x;//上面说了撒,至少保证a[i]==x;
}
}
for(int i=2; i<=n; i++) {//因为a[i]+a[i-1]的缘故,所以i从2开始,其实从1开始也可以,a[0]=0,不影响
if(a[i]+a[i-1]>x) {//如果大于了x,就准备吃糖吧
sum+=a[i]+a[i-1]-x;//吃掉多余的
a[i]=x-a[i-1];//贪心--因为我要吃最少的糖满足条件,就必须保证a[i]+a[i-1]刚好等于x,就可以少吃糖
}
}
cout<<sum;//收工,输出答案
return 0;//养成一个好习惯
}