Codeforce 546 B. Soldier and Badges

题目链接:http://codeforces.com/contest/546/problem/B

题目意思:输入一个n,然后输入n个数,使得这n个数不重复,最少需要加几。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>

using namespace std;

int a[3005];
int visit[6005];

int main()
{
    int n;

    while(scanf("%d",&n)!=EOF)
    {
        memset(visit,0,sizeof(visit));
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            visit[a[i]]++;
        }
        sort(a+1,a+n+1);
        long long sum=0;
        for(int i=2;i<=n;i++)
        {
            if(a[i]==a[i-1])
            {
                for(int j=a[i];;j++)
                {
                    if(visit[j]==0)
                    {
                        sum+=j-a[i];
                        visit[j]=1;
                        break;
                    }
                }
            }
        }

        printf("%lld
",sum);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/mengzhong/p/5003249.html