72pts
查看原帖
72pts
248654
LaoPi楼主2020/10/10 22:35

帮忙查一下错

#include<stdio.h>
#define int long long
#define abs(a)((a)>0?(a):(-(a)))
int n,m,a[100050];
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	int pos1,num1,num2;
	scanf("%lld%lld%lld%lld",&m,&pos1,&num1,&num2);//读入 
	a[pos1]+=num1;
	int sum1=0,sum2=0;
	for(int i=1;i<m;i++){
		sum1+=(m-i)*a[i];
	}
	for(int i=m+1;i<=n;i++){
		sum2+=(i-m)*a[i];
	}//sum1为龙的势力 
	if(sum1==sum2){
		printf("%lld\n",m);
	}//若已经相等,放在m处 
	if(sum1<sum2){//若龙势力小,要增加龙的势力 
		int pos2,minn=2e18;//pos2为天降奇兵的位置,minn为最小的差值 
		for(int i=1;i<m;i++){ 
			int tmp=(m-i)*num2;//tmp为龙增加的势力值 
			if(abs(sum1+tmp-sum2)<minn){
				minn=abs(sum1+tmp-sum2);
				pos2=i;
			}//更新答案 
		}
		printf("%lld\n",pos2);
	} 
	if(sum1>sum2){//若虎势力小,要增加虎的势力 
		int pos2,minn=2e18;//pos2为天降奇兵的位置,minn为最小的差值 
		for(int i=m+1;i<=n;i++){
			int tmp=(i-m)*num2;;//tmp为虎增加的势力值 
			if(abs(sum2+tmp-sum1)<minn){
				minn=abs(sum2+tmp-sum1);
				pos2=i;
			}//更新答案 
		}
		printf("%lld\n",pos2);
	}
	return 0;
}
2020/10/10 22:35
加载中...