不相信自己的人,连努力的价值都没有。|

Code_AC

园龄:3年粉丝:5关注:3

CF285C题解

题目大意:

就是给你一个长度为 n 的序列 ai ,现在只能进行 +11 的操作,问你最少需要多少步操作才能将原序列变为下标从 1n ,且数值同样从 1n 的序列。

题目分析:

这题我们可以使用贪心的策略,我们这样想:

  • 将序列按从小到大的顺序排序后,每个数和其对应下标的差值必定最小,所以,将这些差值的绝对值加和就是我们要求的答案。

看这道题的数据范围, 109ai109 ,需要开 long long

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=3e5+5;
int n;
int a[MAXN];
int ans;
signed main()
{
scanf("%lld",&n);
for(register int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
for(register int i=1;i<=n;i++)
ans+=abs(a[i]-i);
printf("%lld\n",ans);
return 0;
}

本文作者:Code_AC

本文链接:https://www.cnblogs.com/code-ac/p/16558499.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Code_AC  阅读(41)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起