CF285C题解
题目大意:
就是给你一个长度为 的序列 ,现在只能进行 和 的操作,问你最少需要多少步操作才能将原序列变为下标从 到 ,且数值同样从 到 的序列。
题目分析:
这题我们可以使用贪心的策略,我们这样想:
- 将序列按从小到大的顺序排序后,每个数和其对应下标的差值必定最小,所以,将这些差值的绝对值加和就是我们要求的答案。
看这道题的数据范围, ,需要开 。
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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步