第一份,TLE
#include<bits/stdc++.h>
using namespace std;
long long w[100005],s1,s2;
int n,m,p1;
struct node{
int cha,hao;
}ans[100005];
long long lf(int m){
int sum=0;
for(int i=1;i<=m-1;i++) sum+=w[i]*(m-i);
return sum;
}
long long rf(int m){
int sum=0;
for(int i=m+1;i<=n;i++) sum+=w[i]*(i-m);
return sum;
}
bool cmp(node x,node y){
if(x.cha!=y.cha) return x.cha<y.cha;
else return x.hao<y.hao;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
cin>>m>>p1>>s1>>s2;
w[p1]+=s1;
for(int i=1;i<=n;i++)
{
w[i]+=s2;
ans[i].cha=abs(lf(m)-rf(m));
ans[i].hao=i;
w[i]=w[i]-s2;
}
sort(ans+1,ans+n+1,cmp);
cout<<ans[1].hao;
return 0;
}
第二份,WA
#include<bits/stdc++.h>
using namespace std;
long long w[100005],s1,s2,n,m,p1,amin,sum1,sum2,hao,t;
long long lf(long long m){
int sum=0;
for(int i=1;i<=m-1;i++) sum+=w[i]*(m-i);
return sum;
}
long long rf(long long m){
int sum=0;
for(int i=m+1;i<=n;i++) sum+=w[i]*(i-m);
return sum;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
cin>>m>>p1>>s1>>s2;
hao=m;
w[p1]+=s1;
sum1=lf(m);
sum2=rf(m);
amin=abs(sum1-sum2);
for(int i=1;i<=n;i++)
{
if(i<m)
{
sum1+=s2*(m-i);
t=abs(sum1-sum2);
sum1=sum1-s2*(m-i);
}
else
{
sum2+=s2*(i-m);
t=abs(sum1-sum2);
sum2=sum2-s2*(i-m);
}
if(t<amin)
{
amin=t;
hao=i;
}
}
cout<<hao;
return 0;
}