我是靠谱客的博主 孤独可乐,最近开发中收集的这篇文章主要介绍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解题报告所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复