好久没发题解了,今天来一道别人自创的题
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_M = 1e5 + 5;
int m;
long long n;
long long a[MAX_M];
bool canBuy(long long t) {
long long total = 0;
for (int i = 0; i < m; ++i) {
if (t >= a[i]) {
total += (t - a[i] + 1);
if (total >= n) return true;
}
}
return false;
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; ++i) {
cin >> a[i];
}
sort(a, a + m);
long long left = 0;
long long right = 1e18;
long long ans = right;
while (left <= right) {
long long mid = (left + right) / 2;
if (canBuy(mid)) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << ans;
return 0;
}
好好干吧!