传送门
一道挺有意思的贪心。
从1到n依次满足条件。
注意要特判第一个数已经大于x的情况。
但是如何贪心吃呢?
如果靠左的数没有越界,我们吃靠右的数。
原因是下一次靠右的数就会成为靠左的数,相当于多贡献了一次。
然后貌似要开long long
代码:
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
ll a[N],x,ans=0;
int n;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
n=read(),x=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=2;i<=n;++i){
if(a[i-1]+a[i]<=x)continue;
if(a[i-1]>=x)ans+=a[i-1]-x+a[i],a[i]=0;
else ans+=a[i]-(x-a[i-1]),a[i]=(x-a[i-1]);
}
cout<<ans;
return 0;
}