答案(注释版)

 •  7个月前


include <bits/stdc++.h>

using namespace std; long long a[100005];

int main() {

long long n, s1, p1, s2, p2, m;
scanf("%lld", &n);
for (int i = 1; i <= n; i++) {
	scanf("%lld", &a[i]);
}
scanf("%lld%lld%lld%lld", &m, &p1, &s1, &s2);
a[p1] += s1;
long long l = 0, h = 0;
for (int i = 1; i < m; i++) //龙的气势
	l += (m - i) * a[i];
for (int i = m + 1; i <= n; i++) //虎的气势
	h += (i - m) * a[i];
long long b = abs(l - h); //气势之差
p2 = m;//中立兵营
long long min = b;
for (int i = 1; i <= n; i++) {//枚举s2位工兵在每一个位置的气势之差
	long long ans1 = l, ans2 = h;
	if (i < m) {
		ans1 += (m - i) * s2;//s2位工兵加入龙的阵营后的气势
	}
	if (i > m) {
		ans2 += (i - m) * s2;//s2位工兵加入虎的阵营后的气势
	}
	if (abs(ans1 - ans2) < min) {//s2位工兵加入阵营后的气势之差
		min = abs(ans1 - ans2);//记录最小的气势之差
		p2 = i;//记录s2位工兵气势之差最小值的位置
	}
}
cout << p2;
return 0;

}


评论:

请先登录,才能进行评论