龙虎斗
元夕
·
·
题解
龙虎斗
思路:枚举
实现方法:按位枚举
结果:正确
#include<bits/stdc++.h>//开库
#define ll long long//运用define将long long定义为ll
using namespace std;//开辟名字空间
ll i,j,k,n,m,p1,s1,s2;
ll a[100010],x,y;//以上都是定义
int main(){
cin>>n;
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
cin>>m>>p1>>s1>>s2;//以上为输入
a[p1]+=s1;//在p1神兵天降s1人
for(i=1;i<=n;i++){
if(i<m)x+=(m-i)*a[i];
if(i>m)y+=(i-m)*a[i];
}//计算轩轩、凯凯方士气
ll ans=1e22,num=1e22;//先最大化
for(i=1;i<=n;i++){//枚举派兵位置
if(i<m)x+=(m-i)*s2;//派给轩轩
if(i>m)y+=(i-m)*s2;//派给凯凯
ll u=abs(x-y);//计算轩轩、凯凯之差
if(u<ans){
ans=u;
num=i;
}//若此时枚举的士气差小于最小值,更新答案
if(i<m)x-=(m-i)*s2;//复原
if(i>m)y-=(i-m)*s2;//复原
}
printf("%d",num);//输出
return 0;
}