一个一个的比较才是最优的 answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int, vector<int>, less<int> > que;
int n, m, m_, x;
void prep() {
while(!que.empty()) que.pop();
n--;
scanf("%d", &m); m_ = m;
for(int i = 0; i < n; ++i) {
scanf("%d", &x);
que.push(x);
}
}
void solve() {
while(1) {
x = que.top(), que.pop();
if(m <= x) { m++; x--; que.push(x); }
else break;
}
cout << m - m_ << endl;
}
int main() {
scanf("%d", &n);
prep();
solve();
return 0;
}
// ————————false code ————————
/*
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 100;
int a[maxn];
int n, m, cnt;
void prep() {
n--;
scanf("%d", &m);
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
sort(a, a+n);
}
void solve() {
int cnt = 0;
for(int i = n-1; i >= 0; --i) {
if(m > a[i]) break;
int t = (m+a[i]+1) / 2;
cnt += (t - m);
if((m+a[i]) % 2 == 0) {
if(i+1 < n) {
if(t >= a[i+1]) { cnt++; break;}
}
}
m = t;
}
cout << cnt << endl;
}
int main() {
scanf("%d", &n);
prep();
solve();
return 0;
}
*/