CF285C Building Permutation
题目描述
排列 $p$ 是一个有序整数集合 $p_{1},p_{2},...,p_{n}$,由 $n$ 个互不相同的正整数构成,每个整数都不超过 $n$。我们将排列 $p$ 的第 $i$ 个元素记作 $p_{i}$。我们把数 $n$ 称为排列 $p_{1},p_{2},...,p_{n}$ 的大小或长度。
现在你有一个整数序列 $a_{1},a_{2},...,a_{n}$。每次操作,你可以将任意一个数加一或减一。请你计算,将该序列变为一个排列所需的最少操作次数。
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 3 \cdot 10^{5}$),代表排列的大小。第二行包含 $n$ 个整数 $a_{1},a_{2},...,a_{n}$($-10^{9} \leq a_{i} \leq 10^{9}$)。
输出格式
输出一个整数,表示将序列变为排列所需的最少操作次数。
请不要在 C++ 中使用 %lld 格式符来读写 64 位整数。建议使用 cin、cout 流或者 %I64d 格式符。
说明/提示
在第一个样例中,你需要将第一个数减一,再将第二个数加一。最终得到的排列是 $(2, 1)$。
在第二个样例中,你需要 6 次操作才能将序列变为排列 $(1, 3, 2)$。
由 ChatGPT 5 翻译