题解 P5016 【龙虎斗 】
jianzihao
2018-11-11 18:33:07
## 前言:我只是个蒟蒻,请大佬们多包容.
```
#include<bits/stdc++.h>
using namespace std;
struct longhudou{
long long sbs;
long long sq;
long long jl;
}a[1000005];
long long zb(long long n)
{
if(n>=0)return n;
else return n*-1;
}
int main()
{
long long n,dra=0,tig=0,min=9e18,cz;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i].sbs);
}
long long m,p1,p2,s1,s2;
scanf("%lld%lld%lld%lld",&m,&p1,&s1,&s2);
a[p1].sbs+=s1;
for(int i=1;i<=n;i++)
{
if((m-i)>0)
{
a[i].jl=m-i;
a[i].sq=a[i].jl*a[i].sbs;
dra+=a[i].sq;
}
else if((m-i)<0)
{
a[i].jl=i-m;
a[i].sq=a[i].jl*a[i].sbs;
tig+=a[i].sq;
}
else {
a[i].sq=0;
a[i].jl=0;
}
}
if(dra==tig){
printf("%lld",m);
return 0;
}
if(dra>tig)
{
cz=dra-tig;
for(int i=m;i<=n;i++)
{
if(zb(a[i].jl*s2-cz)<min)
{
p2=i;
min=zb(a[i].jl*s2-cz);
}
}
}
if(dra<tig)
{
cz=tig-dra;
for(int i=1;i<=m;i++)
{
if(zb(a[i].jl*s2-cz)<min)
{
p2=i;
min=zb(a[i].jl*s2-cz);
}
}
}
printf("%lld",p2);
return 0;
}
```