2255: NOIP2018 普及组第二题 龙虎斗★★★

题目描述

输入

输出

代码(作者懒得写批注了,也方便各位兄弟提交)

#include<bits/stdc++.h>

using namespace std;

long long n,a[10000001];

long long m,p,s1,s2,sum1,sum2,ans=INT_MAX,num;

int main()

{

    scanf("%lld",&n);

    for(long long i=1; i<=n; i++)

        scanf("%lld",&a[i]);

    scanf("%lld%lld%lld%lld",&m,&p,&s1,&s2);

    a[p]+=s1;

    for(long long i=1; i<m; i++)

    {

        sum1+=abs(m-i)*a[i];

    }

    for(long long i=m+1; i<=n; i++)

    {

        sum2+=abs(i-m)*a[i];

    }

       

       

       

    if(sum1<sum2)

    {

        for(long long i=1; i<=m; i++)

        {

            sum1+=s2*abs(i-m);

            if(ans>abs(sum1-sum2))

            {

                ans=abs(sum1-sum2);

                num=i;

            }

            sum1-=s2*abs(i-m);

        }

    }

    if(sum1==sum2)

    {

        ans=0;

        num=m;

    }

    if(sum1>sum2)

    {

        for(long long i=m; i<=n; i++)        

        {

            sum2+=s2*abs(i-m);

            if(ans>abs(sum1-sum2))

            {

                ans=abs(sum1-sum2);

                num=i;

            }

            sum2-=s2*abs(i-m);

        }

    }

    printf("%lld\n",num);

   

    return 0;

}

 希望大家采纳,顺便给一个好评,谢谢了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值