xindoo is
always here

codeforces 285C – Building Permutation


题目链接

题目大意是有一个含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;
}
打赏
未经允许不得转载:XINDOO » codeforces 285C – Building Permutation
分享到: 更多 (0)

评论 抢沙发

xindoo

联系我联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏