546B Soldier and Badges
模拟:
依题意模拟即可。
别忘了把数组开大来!
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main () {
cin >> n;
for (int i = 1;i <= n;i++) {
int x;
cin >> x;
a[x]++;
}
int sum = 0,cnt = 0,i = 1;
while (sum != n) {
while (a[i] > 1) {
a[i]--,a[i+1]++;
cnt++;
}
sum += a[i++];
}
cout << cnt << endl;
return 0;
}

浙公网安备 33010602011771号