Description
有一个长度是n(n<=3000)的数列。每个数x(0<=x<=n),你可以花一块钱使得这个数增加1,要使得n个数都不相同,那么最小需要几块钱
Input
第一行一个数n,接下来n个数
Output
输出一个数,表示最小的花费
Sample Input
4 4 3 2 2
Sample Output
3
思路
开一个标记数组,记录出现过的数字。
代码
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX 5000
int main()
{
int n,arry[MAX],mark[MAX];
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&arry[i]);
}
sort(arry+1,arry+n+1);
memset(mark,0,sizeof(mark));
int re=0;
for(int i=1;i<=n;i++)
{
if(!mark[arry[i]])
mark[arry[i]]=1;
else if(mark[arry[i]])
{
int l=arry[i];
while(mark[l])
{
l+=1;
}
re+=l-arry[i];
mark[l]=1;
}
}
printf("%d\n",re);
}
return 0;
}
389

被折叠的 条评论
为什么被折叠?



