我是靠谱客的博主 孤独可乐,最近开发中收集的这篇文章主要介绍AtCoder Regular Contest 100 C:Linear Approximation解题报告,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

点击此处打开题目
题目大意:这次比赛所有的题目都描述的很简单,我这种英语不好的也能一看就懂。给你N个数存为Ai,请你给出一个b,使abs(A1−(b+1))+abs(A2−(b+2))+…+abs(AN−(b+N))最小,输出这个最小值。

思路:一看到绝对值,就应该想到数轴上点之间的距离,这道题虽然给b加上了i,但只要把式子拆开,一开始就把每个Ai减去i就行了。然后可以证明(或者学过)一个点到其他点距离和最短应该是这些点坐标集合的中位数,然后直接写就行了。(一定要记得用long long!)

AC程序

//库省略
const int maxn=200005;
ll n,d,k;
ll a[maxn];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]-=i;
    }
    sort(a+1,a+n+1);
    ll b=0;
    if(n%2==0)
    b=(a[n/2]+a[n/2+1])/2;
    else
    b=a[n/2+1];
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        ans=ans+abs(b-a[i]);
    }
    cout<<ans<<endl;
    return 0;
}

最后

以上就是孤独可乐为你收集整理的AtCoder Regular Contest 100 C:Linear Approximation解题报告的全部内容,希望文章能够帮你解决AtCoder Regular Contest 100 C:Linear Approximation解题报告所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部