题解 P5016 【龙虎斗 】

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;
}