龙虎斗
这题n的范围只有,所以暴力枚举是不会超时的,主代码就是
if(abs(A+(long long)(m-i)*y-B)<sum)
sum=abs(A+(long long)(m-i)*y-B),ans=i;
if(abs(B+(long long)(i-m)*y-A)<sum)
sum=abs(B+(long long)(i-m)*y-A),ans=i;
#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int n,m,s,t,x,y,ans;
long long A,B,sum;
int p[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&p[i]);
scanf("%d%d%d%d",&m,&s,&x,&y);
p[s]=p[s]+x;
for(int i=1;i<=m-1;i++)A+=(long long)p[i]*(m-i);
for(int i=m+1;i<=n;i++)B+=(long long)p[i]*(i-m);
sum=abs(A-B),ans=m;
if(A<B)
{
for(int i=1;i<=m-1;i++)
{
if(abs(A+(long long)(m-i)*y-B)<sum)
sum=abs(A+(long long)(m-i)*y-B),ans=i;
}
}
else if(A>B)
{
for(int i=m+1;i<=n;i++)
{
if(abs(B+(long long)(i-m)*y-A)<sum)
sum=abs(B+(long long)(i-m)*y-A),ans=i;
}
}
printf("%d",ans);
return 0;
}