30分,求助
查看原帖
30分,求助
577957
Ohhhhhh321楼主2021/11/17 21:52
#include<algorithm>
using namespace std;
long long b[1000000],temp;
void ac(long long a[],long long M,long long n){
	temp=n;
	if(M==0)return;
	long long min=1000000001;
	for(long long i=1;i<=n;i++)
	if(min>b[i])min=b[i];
	for(long long k=1;k<=n;k++){
		if(min==b[k]){
			if(k==1){
			b[1]+=b[2];
			for(long long i=2;i<=n-1;i++){
				b[i]=b[i+1];
			}
			}
			else if(k==n){
			b[n-1]+=b[n];}
			else{
				if(b[k-1]<b[k+1]){
					b[k-1]+=b[k];
					for(long long z=k;z<=n-1;z++)
					b[z]=b[z+1];
				}
				if(b[k-1]>=b[k+1]){
					b[k]+=b[k+1];
					for(long long p=k+1;p<=n-1;p++)
					b[p]=b[p+1];
				}
			}
		
		break;
		}
		
	}
	ac(a,M-1,n-1);
}
int main(){
	long long L,N,M,i,k;
	scanf("%lld%lld%lld",&L,&N,&M);
	long long a[200000]={0};
	for(i=1;i<=N;i++){
		scanf("%lld",&a[i]);
	}
	a[N+1]=L;
	for(i=1;i<=N+1;i++){
		b[i]=a[i]-a[i-1];
	}
	ac(b,M,N+1);
	long long min2=b[1];
	for(long long q=2;q<=temp;q++){
		if(min2>b[q]){
			min2=b[q];
		}
	}
	printf("%lld",min2);
	return 0;

}
2021/11/17 21:52
加载中...