题目链接:click here~~
【题目大意】给你一个整数(1?≤?n?≤?3000)序列,求操作的最少步骤使得序列里没有相同的数,
【解题思路】昨天想到一个可行的巧妙的方法:输入之后排序,然后依次判断一下,初始化last=-1,判断完之后
每次把最大的数更新为last,否则累加++last减去当期值的差,
#include <bits/stdc++.h>
using namespace std;
const int N=1e4;
int num[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&num[i]);
sort(num,num+n);
int last=-1,res=0;
for(int i=0;i<n;i++)
{
if(num[i]>last) last=num[i];
else res+=++last-num[i];
}
printf("%d\n",res);
return 0;
}CodeForces 546B - Soldier and Badges
原文:http://blog.csdn.net/u013050857/article/details/46042553