感觉情况很多呀,以x/2为分界线,不能有超过两个盒子里的糖果超过他。如果一个盒子里的糖果大于x/2且为t,那么剩下的所有的糖果都不能超过x-t。而且要求的是最少的那种情况,那到底是把糖果多的盒子全吃到x/2还是把小于x/2的全吃到x-t。这还取决于有多少糖果多的盒子和多少糖果少的盒子。
!!!干脆把眼睛珠子挖出来算了,“每相邻两个盒子”
所以每两个两个比较,如果两个相加s大于x,则总共要吃掉s-x个糖果,而为了贪心让总吃的最少,所以每次吃第二个盒子里的糖果肯定最赚,因为这样下次再两两比较吃的也肯定最少
int main() {
int n;
ll x,a[100001]={0},s=0;
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)//第一个盒子同样要贪心,相当于他的上一个为0
if(a[i]+a[i-1]>x) {s+=a[i]+a[i-1]-x;a[i]=x-a[i-1];}
cout<<s;
return 0;
}