题目链接
小b养了n盆花,第i盆花高度为A[i]。
小b每天可以给某一盆花浇水,这样这盆花就会长高一单位。
小b希望每盆花都是独一无二的,也就是不存在两盆花高度相等。
求小b最少要浇几天水。
输入
第一行输入一个非负整数n;
第二行输入n个非负整数,表示A[i];
其中0≤n≤40000,0≤A[i]<40000
输出
输出一个非负整数,表示答案。
输入样例
6
3 2 1 2 1 7
输出样例
6
#include<bits/stdc++.h>
using namespace std;
int n,a[40100],vis[40100],lastV[40100],previ[40100],zhongjian;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
++vis[a[i]];
lastV[i] = previ[a[i]];
previ[a[i]] = i;
}
long long sum=0;
sort(a+1,a+n+1);
for(int i=2;i<=n;i++){
if(a[i]!=a[i-1]&&lastV[i]==0){
sum=sum;
}
if(a[i]==a[i-1]){
++a[i];
++sum;
++vis[a[i]];
--vis[a[i]-1];
continue;
}
if(vis[a[i]]>1&&(a[i]!=a[i-1])&&lastV[i]!=i){
zhongjian=a[i];
--vis[a[i]];
a[i]=a[i-1]+1;
++vis[a[i]];
sum+=(a[i]-zhongjian);
}
}
cout<<sum<<endl;
return 0;
}