#include<iostream>
#include<cmath>
using namespace std;
int n, k, a[1000100];
bool check(int x)
{
int t = 0;
for(int i = 0; i < n; i ++)
{
if(a[i] <= x) continue;
else
{
int ans = 0;
int aa = a[i] - x, bb = k - 1;
//cout << aa * 1.0 / bb << endl;
ans = ceil((aa*1.0) / bb);
//cout << ans << endl;
t += ans;
//cout << t << endl;
if(t > x) return false;
}
}
return true;
}
int main()
{
int l = 0, r = 0;
cin >> n;for(int i = 0; i < n; i ++) cin >> a[i], r = max(r, a[i]); cin >> k;
int ans = 0x3f3f3f3f;
if (k == 1)
{
cout << r;
return 0;
}
while(l <= r)
{
int mid = (l + r) / 2;
if(check(mid)) r = mid - 1, ans = min(mid, ans);
else l = mid + 1;
}
cout << ans << endl;
}
一. check部分
解个不等式就行hhh(要记得上取整), 要注意k - 1不能 = 0所以要特判,