coderforce 546 B. Soldier and Badges

题意:给一列数,问你必须增加多少(只能增加哦),才能使数列中每个数都不一样。

解:先求每个数的和sum1,再排序,如果排序后,前一个数与后面一个数相同,则增加,比前一个小则后一个=a[i-1]+1。sum2+=a[i];最后求sum2-sum1;

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=1e4;
int a[maxm];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int sum1=0,sum2=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum1+=a[i];
        }
        sort(a,a+n);
        sum2=a[0];
        for(int i=1;i<n;i++)
        {
            if(a[i]==a[i-1])
                a[i]++;
            else if(a[i]<a[i-1])
                a[i]=a[i-1]+1;
            sum2+=a[i];
        }
        printf("%d\n",sum2-sum1);
    }
    return 0;
}

你可能感兴趣的:(coderforce 546 B. Soldier and Badges)