先贴我的代码
#include<bits/stdc++.h>
using namespace std;
int a[110000];
int main(){
int n,x,sum=0;
cin>>n>>x;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<n;i++)
if(a[i]+a[i+1]>x)
if(a[i]==a[i+1]){
if(a[i+1]-(a[i]+a[i+1]-x)>=0){
sum+=a[i+1]-(a[i]+a[i+1]-x);
a[i+1]-=(a[i]+a[i+1]-x);
}
else{
sum+=a[i+1]+(a[i]+a[i+1]-x)-a[i+1];
a[i]-=(a[i]+a[i+1]-x)-a[i+1];
a[i+1]=0;
}
}
else{
sum+=a[i]+a[i+1]-x;
if(a[i]>a[i+1]) a[i]-=(a[i]+a[i+1]-x);
else if(a[i]<a[i+1]) a[i+1]-=(a[i]+a[i+1]-x);
}
cout<<sum<<endl;
return 0;
}
思路:从头到尾遍历一次,如果相邻两个数不相等则减较大的数,相等则减靠后的一个。一个数减到零就再减前一个,直到满足要求。讨论版的所有hack数据全都试过了,还有自己造的几组,都可以过,但交上去只有20分,请dalao看一下整体思路或判定条件有哪些问题,谢谢