p1位置加s1个工兵,先算一遍双方势力之差,然后依次枚举把s2个工兵放在所有的兵营里,取最小就行了
#include#include #include using namespace std;long long n,m,sum1,sum2,minn,mink,a[100010],p,s1,s2;int read(){ int x=0; int mk=1; char ch=getchar(); while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); if(ch=='-'){ mk=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-48; ch=getchar(); } return x*mk;}//快速读入int main(){ n=read(); for(int i=1;i<=n;i++) a[i]=read(); m=read();p=read();s1=read();s2=read();//读入 a[p]+=s1;//累计p的位置 for(int i=1;i<=m-1;i++) sum1+=a[i]*(m-i); for(int i=m+1;i<=n;i++) sum2+=a[i]*(i-m);//累计和 minn=abs(sum2-sum1); mink=m;//放在第m的位置 if(sum1 abs(sum2-(sum1+s2*(m-i)))){ minn=abs(sum2-(sum1+s2*(m-i))); mink=i; }//放在左边 }else{ for(int i=m+1;i<=n;i++) if(minn>abs(sum1-(sum2+s2*(i-m)))){ minn=abs(sum1-(sum2+s2*(i-m))); mink=i; }//放在右边 } printf("%d",mink);//输出 return 0;}