80pts玄关(不是long long)
查看原帖
80pts玄关(不是long long)
1267321
zhrhh123456楼主2024/9/30 12:19
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct lhd {
	int minn = 0x7fffffff, id;
}lf, hf, mf, ans;
int n, c[100010], m, p1, s1, s2, l, h;
int js(bool f) {
	int num = 0;
	if (f == 0) {
		for (int i = 1; i < m; i++) {
			num += c[i] * abs(i - m);
		}
	} else {
		for (int i = m+1; i <= n; i++) {
			num += c[i] * abs(i - m);
		}
	}
	return num;
}
signed main() {
	//freopen("fight.in", "r", stdin);
	//freopen("fight.out", "w", stdout);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> c[i];
	}
	cin >> m >> p1 >> s1 >> s2;
	c[p1] += s1;
	for (int i = 1; i < m; i++) {
		c[i] += s2;
		l = js(0), h = js(1);
		if (lf.minn > abs(l-h)) {
			lf.minn = abs(l-h);
			lf.id = i;
		}
		c[i] -= s2;
	}
	for (int i = m+1; i <= n; i++) {
		c[i] += s2;
		l = js(0), h = js(1);
		if (hf.minn > abs(l-h)) {
			hf.minn = abs(l-h);
			hf.id = i;
		}
		c[i] -= s2;
	}
	c[m] += s2;
	l = js(0), h = js(1);
	mf.minn = abs(l-h);
	mf.id = m;
	c[m] -= s2;
	ans.minn = min(lf.minn, min(hf.minn, mf.minn));
	cout << (ans.minn == lf.minn ? lf.id : (ans.minn == hf.minn ? hf.id : mf.id));
	return 0;
}
2024/9/30 12:19
加载中...