16分!!!求调
查看原帖
16分!!!求调
1028523
nQAQn楼主2024/7/25 16:29
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
long long n,arr[N],m,s1,p1,s2,p2;
long long ans_hu,ans_long;
long long ans=0x3f3f3f3f;
int main(){
//	freopen("xxx.in","r",stdin);
//	freopen("xxx.out","w",stdout);
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&arr[i]);
	}
	scanf("%lld%lld%lld%lld",&m,&p1,&s1,&s2);
	for(int i=1;i<=m-1;i++){//计算龙最开始的势力 
		ans_long=ans_long+(arr[i]*(m-i));
	}
	for(int i=m+1;i<=n;i++){//计算虎最开始的势力 
		ans_hu=ans_hu+(arr[i]*(i-m));
	}
	if(p1<m){//p_1在龙那边 
		ans_hu=ans_hu+(s1*(m-p1));
	}else if(p1>m){//p_1在虎那边 
		ans_hu=ans_hu+(s1*(p1-m));
	}
	if(ans_long<ans_hu){
		for(int i=1;i<=m-1;i++){
			int x=ans_long+(s2*(m-i));
			if(x<=ans_hu){
//				ans=min(ans,ans_hu-x);
				if(ans>ans_hu-x){
					ans=ans_hu-x;
					p2=i;
				}
			}else if(x>ans_hu){
//				ans=min(ans,x-ans_hu);
				if(ans>x-ans_hu){
					ans=x-ans_hu;
					p2=i;
				}
			}
		}
	}else if(ans_long>ans_hu){
		for(int i=m+1;i<=n;i++){
			int x=ans_hu+(s2*(i-m));
			if(x<=ans_long){
//				ans=min(ans,ans_long-x);
				if(ans>ans_long-x){
					ans=ans_long-x;
					p2=i;
				}
			}else if(x>ans_long){
//				ans=min(ans,x-ans_long);
				if(ans>x-ans_long){
					ans=x-ans_long;
					p2=i;
				}
			}
		}
	}
	printf("%lld",p2);
	return 0;
}
2024/7/25 16:29
加载中...