NOIP2018普及T2暨洛谷P5016 ***

题目链接:https://www.luogu.org/problemnew/show/P5016

分析:

这是一道模拟题。看到题目,我们首先要把它细致的读明白,模拟题特别考察细节,往往会有想不到的坑点(好吧,这题貌似没有)。

然后我们还要看一看数据范围,可以注意到会出现10^9级别的数字。稍有信息学常识的人都知道,int型存储的最大数字是2147483647(再加就了),实在背不过这个数字也没关系,只要记住大概10910^9109级别即可,所以这题就可以long long了。

考虑到只需要开一个10510^5105级别的数组,所以全部long long就好(方便)。

我们顺着题目的思路,先求出每一方的气势,并不用记录每一个点的气势(别忘了p1点要先加上s1),然后我们可以先计算出两者之差(取个绝对值就不用考虑那么多了),由于要计算最小值,所以记录那个值的QAQ要赋一个最大值。然而我们并不需要多么大,考虑到最后两方之差总要减去一个加上的气势,所以最大值只需要赋成s。。。

然后后面就是简单的分情况讨论,别忘了从小到大,这样能满足最小的序号

代码:

#include<cstdio>
#include<cmath>
using namespace std;
#define maxn 100005
long long n,m,c[maxn],p1,ans,s1,s2,l,r,QAQ;
int main()
{
    scanf("%lld",&n);
    for(long long i=1;i<=n;i++)scanf("%lld",&c[i]);
    scanf("%lld%lld%lld%lld",&m,&p1,&s1,&s2);
    c[p1]+=s1;
    for(long long i=1;i<m;i++) l+=c[i]*(m-i);
    for(long long i=m+1;i<=n;i++) r+=c[i]*(i-m);
    long long s=abs(l-r);
    QAQ=s;
    ans=m;
    if(l>r)
    {
        for(long long i=m+1;i<=n;i++)
        {
            if(abs(s-s2*(i-m))<QAQ)
            {
                QAQ=abs(s-s2*(i-m));
                ans=i;
            }
        }
    }
    else
    {
        for(long long i=1;i<m;i++)
        {
            if(abs(s-s2*(m-i))<=QAQ)
            {
                QAQ=abs(s-s2*(m-i));
                ans=i;
            }
        }
    }
   	printf("%lld",ans);
    return 0;
}
全部评论

相关推荐

机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务