16分求助
查看原帖
16分求助
403266
JYZHANG楼主2021/10/15 17:18
#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 10001;
int a[MAXN], n, m, s1, p1, s2, p2; //p2 - > answer 
long long left, right;

int main(){
	
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		scanf("%d", &a[i]); // read the record
	scanf("%d%d%d%d", &m, &p1, &s1, &s2);
	
	for(int i=1; i<m; i++)
		left += (m - i) * a[i]; // 依次累加,求左边的势力 
	
	for(int i=m+1; i<=n; i++)
		right += (i - m) * a[i]; // 依次累加, 求右边的势力 
	 
	if(p1 < m) left += ((m - p1) * s1);
	else right += ((p1 - m) * s1); // 神兵天降 
	
	if(left > right){ // 于是 s2 , p2 在右边 
		int chaju = left - right;
		int minn = chaju;
		for(int i=m; i<=n; i++)
			if(min(minn, abs(minn - a[i] * (i - m))) < minn){
				s2 = i;
				minn = abs(minn - a[i] * (i - m));
			}
		
		printf("%d", s2);
		return 0;
	}
	else{
		int chaju = right - left;
		int minn = chaju;
		for(int i=1; i<=m; i++)
			if(min(minn, abs(minn - a[i] * (i - m))) < minn){
				s2 = i;
				minn = abs(minn - a[i] * (i - m));
			}
		
		printf("%d", s2);
		return 0;
	}
}
2021/10/15 17:18
加载中...