P5016 龙虎斗

P5016 龙虎斗

题解

这题显然没有什么好说的,一个for循环就搞定了

但还是要注意

p2初始化为m,不然有的测试点你会输出0

为啥??

因为没更新啊,也就是,本来这两个人的势力差距很大了,你再补兵,适得其反,又大拉大了差距,这时显然不会更新p2,那么久把兵往m里边补

代码

#include<bits/stdc++.h>

using namespace std;

int n,m,p1,p2;
long long bing[100010],s1,s2;
long long dragon,tiger;


int main()
{
//    freopen("akk.in","r",stdin);
//    freopen("yy.out","w",stdout);
    
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      scanf("%d",&bing[i]);
    scanf("%d%d%ld%ld",&m,&p1,&s1,&s2);
    
    bing[p1]+=s1;
    
    for(int i=m-1;i>=1;i--)
       dragon+=(bing[i]*(m-i));
    
    for(int i=m+1;i<=n;i++)
       tiger+=(bing[i]*(i-m));
       
    if(dragon==tiger) 
    {
        printf("%d",m);
        return 0;
    }
    
     p2=m;
long long cha=abs(tiger-dragon);
    if(dragon<tiger)
    {
        for(int i=m-1;i>=1;i--)
        {
            long long sum=s2*(m-i);
            if(abs(tiger-(dragon+sum))<cha)
            {
                cha=abs(tiger-(dragon+sum));
                p2=i;
            }
        }
    }
    
    
    
    if(dragon>tiger)
    {
        for(int i=m+1;i<=n;i++)
        {
            long long sum=s2*(i-m);
            if(abs(dragon-(tiger+sum))<cha)
            {
                cha=abs(dragon-(tiger+sum));
                p2=i;
            }
        }
    }
    
    printf("%d",p2);

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xiaoyezi-wink/p/11098055.html
今日推荐