20分求助
查看原帖
20分求助
808590
YTQ_hailiang楼主2022/10/23 20:29

先贴我的代码

#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看一下整体思路或判定条件有哪些问题,谢谢

2022/10/23 20:29
加载中...