题目大意是有一个含n个数的数组,你可以通过+1或者-1的操作使得其中的数是1--n中的数,且没有重复的数。
既然是这样的题意,那么我就应该把原数组中的数尽量往他最接近1--n中的位置放,然后求差绝对值之和,但有多个数,怎么使他们和最小,这样就要对其进行排序了,直接按大小给它们安排好位置,然后计算。
//CF 285C //2013-06-06-19.57 #include <stdio.h> #include <stdlib.h> #include <algorithm> using namespace std; const int maxn = 3*100001; int a[maxn]; int main() { int n; while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a+n); __int64 ans = 0; for (int i = 0; i < n; i++) ans += abs(i+1-a[i]); printf("%I64d\n", ans); } return 0; }