提交时间:2025-12-26 14:39:13

运行 ID: 77683

#include <cstdio> int m, p1, s1, s2, a[1000005]; int n; int compute (int x) {//计算双方势力之差 int sum1 = 0, sum2 = 0;//计算左边和右边 a[x] += s2;//先假设位置x加上s2个工兵 for(int i = 1; i <= n; i ++ ) { if(i == m) continue;//m号兵营跳过 else if(i < m) sum1 += (m - i) * a[i];//m左边的兵营 else sum2 += (i - m) * a[i]; } a[x] -= s2;//再减去s2个,因为是假设加上了s2个工兵 if(sum1 >= sum2) return sum1 - sum2; return sum2 - sum1; } int main () { int min = 2e8, where; scanf("%d", &n); for(int i = 1; i <= n; i ++ ) scanf("%d", &a[i]); scanf("%d%d%d%d", &m, &p1, &s1, &s2); a[p1] += s1;//加上s1个工兵 for(int i = 1; i <= n; i ++ ) { int tmp = compute(i);//算一下势力之差 if(min > tmp) {//如果比之前的最小还小(因为如果势力之差一样小就取编号小的,所以没等号) min = tmp; where = i; } } printf("%d", where); return 0; }