首先祝各位大佬noip有个好成绩吧
当时比赛有个大数据,蒟蒻我暴力居然过了,好激动
这题一定要注意开long long
(那个大数据就是我开long long才过的)
还有刚开始应设置答案为m(见解析)
#include<iostream>
#include<cmath>
using namespace std;
long long f1,f2,f3;//计算初始双方气势
long long a[100005],s1,s2;
int i,n,m,p1,ans;
int main()
{
cin>>n;
for (i=1;i<=n;i++) cin>>a[i];
cin>>m>>p1>>s1>>s2;
for (i=1;i<m;i++)
{if(p1==i) a[i]+=s1; //如果是p1就直接加上计算
f1+=(m-i)*a[i];}
for (i=m+1;i<=n;i++)
{if (p1==i) a[i]+=s1;
f2+=(i-m)*a[i];}
long long cha=abs(f1-f2);//计算双方的差
if (cha==0) {cout<<m; return 0;}
//差已经为0,直接放在m处,m不属于任何一方
ans=m;//若放置后差反而更大,应放m处
for (i=1;i<m;i++)
{
f3=abs(f1+s2*(m-i)-f2);//计算新的差
if (f3<cha) ans=i,cha=f3;
}
for (i=m+1;i<=n;i++)
{
f3=abs(f2+s2*(i-m)-f1);
if (f3<cha) ans=i,cha=f3;
}
cout<<ans;
}