如题,最后五个点过不去, 调不出来
#include<iostream>
#include <cstdio>
#include<cstring>
#include<stdlib.h>
using namespace std;
int main(){
long long c[100010], n, m, p, s1, s2, qs1 = 0, qs2 = 0, num = 0, minnum = 9223372036854775806;
cin>>n;
for(long long i = 0;i<n;i++){
cin>>c[i];
}
cin>>m;
m-=1;
cin>>p>>s1;
p -= 1;
c[p] += s1;
for(long long i = 0;i<=n;i++){
if(i<m){
qs1 += (m-i)*c[i];//计算龙,虎气势
}
if(i>m){
qs2 += (i-m)*c[i];
}
}
cin>>s2;
long long psm1 = 0;//最小气势 差所放的军营
/*
if(n >= 99999){
for(long long j = 0;j<=n;j++){
if(j<m){
num = abs((qs1+s2*(m-j))-qs2);
if(num<minnum){
minnum = num;
psm1 = j;
}
}else if(j > m){
num = abs((qs2+s2*(j-m))-qs1);
if(num<minnum){
minnum = num;
psm1 = j;
}
}
}
cout<<psm1+1;//这部分能过后五个点,前面几个点过不了
}
*/
if(m<=n/2){
for(long long j = 0;j<=n;j++){//枚举每一点,龙
num = abs((qs1+s2*(m-j))-qs2);//当前军营气势差
if(num<minnum){
minnum = num;
psm1 = j;
}
}
}
if(m>n/2){
for(long long j = 0;j<=n;j++){ //枚举每一点,虎
num = abs((qs2+s2*(j-m))-qs1); //当前军营气势差
if(num<minnum){
minnum = num;
psm1 = j;
}
}
}
cout<<psm1+1;
return 0;
}