88分,两个点改了1年都没改对
查看原帖
88分,两个点改了1年都没改对
718928
Mr_Egg楼主2023/10/3 17:21
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;  
int main(){
    int t,n,a[N],d[N];
    scanf("%d",&t);
    while(t--){
    	a[0]=0;
    	memset(d,0,sizeof d);
    	scanf("%d",&n);
    	long long res=0;
		int i;
    	bool flag=1;
    	for(i=1;i<=n;i++){
			scanf("%d",&a[i]);
			d[i]=a[i]-a[i-1];
		}
		if(n==1){
    		printf("-1\n");
    		continue;
		}
    	if(n==2&&a[1]!=a[2]){
    		printf("-1\n");
    		continue;
		}
		for(i=2;i<=n;i+=2){
			if(d[i]<0){flag=0;break;};
			res+=d[i];
			d[i+2]+=d[i];
			d[i]=0;
		}
		if(n&1==0&&d[i-2]!=0){flag=0;};
		for(i=3;i<=n;i+=2){
			if(d[i]<0){
				if(d[1]>=-d[i]){
					res+=(i/2)*(-d[i]);
					d[1]+=d[i];
					d[i]=0;
				}else {flag=0;break;};
			}
			res+=d[i];
			d[i+2]+=d[i];
			d[i]=0;
		}
		if(n&1&&d[i-2]!=0){flag=0;};
		if(flag) printf("%lld\n",2*res);
		else printf("-1\n");
	}
    return 0;
}
2023/10/3 17:21
加载中...