(直接暴力枚举)
直接暴力枚举选择哪个军营,再暴力计算,取最小即可.
注意不要像我一样十分傻逼的将数据看错了.
最重要的是一定要记得开long long!!!
时间复杂度 (我终于知道了)O(n)
C++ 代码
#include<bits/stdc++.h>
using namespace std;
long long m,p1,s1,s2,fi[1000005];
int n;
int main()
{
long long MIN=1e19,w;
long long su1=0,su2=0;
long long k1,k2;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&fi[i]);
scanf("%lld %lld %lld %lld",&m,&p1,&s1,&s2);
fi[p1]+=s1;
for(int i=1;i<=n;i++){
if(i<m)
su1+=(m-i)*fi[i];
else if(i>m)
su2+=(i-m)*fi[i];
}
for(int i=1;i<=n;i++){
k1=su1;
k2=su2;
if(i<m)
k1+=(m-i)*s2;
else if(i>m)
k2+=(i-m)*s2;
long long tep=abs(k1-k2);
if(tep<MIN){
MIN=tep;
w=i;
}
}
printf("%lld",w);
return 0;
}
long long m,p1,s1,s2,fi[1000005]; 有用么?
难道不是定义变量?