P5015 标题统计
题目传送门
思路:
我们先算出龙和虎的不加s2时的势力值,然后暴力1~n去放s2就行了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
long long n,c[N],m,p1,s1,s2,l,h,minn,ans;
void input()
{
cin>>n;
for(long long i=1;i<=n;i++) cin>>c[i];
cin>>m>>p1>>s1>>s2;
c[p1]+=s1; //将s1个人调入p1号兵营
}
int main()
{
//fre();
input();
for(long long i=1;i<=n;i++)
{
if(i<=m) l+=(m-i)*c[i]; //龙的气势(原本)
else h+=(i-m)*c[i]; //虎的气势 (原本)
}
long long t1=l,t2=h;
t1+=(m-1)*s2;
minn=abs(t1-t2),ans=1;
for(long long i=2;i<=n;i++) //模拟s2个人放兵营
{
t1=l,t2=h;
if(i<=m) t1+=(m-i)*s2; //放龙的地盘
else t2+=(i-m)*s2; //放虎的地盘
if(abs(t1-t2)<minn) minn=abs(t1-t2),ans=i; //计算差值并取最小
}
cout<<ans<<endl; //输出答案,完美结束!
return 0;
}