POJ 3104 Drying ——二分

来源:互联网 发布:网络直播推广软文 编辑:程序博客网 时间:2024/06/11 08:07
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100000 + 10;int n, a[maxn], k, l, r, ans;bool solve(int t) {    int sum = 0;    for (int i = 1; i <= n; i++) {        if (a[i] > t) {            if ( (a[i] - t) % (k - 1) == 0) sum += (a[i] - t) / (k - 1);            else sum += (a[i] - t) / (k - 1) + 1;            if (sum > t) return false;        }    }    return true;}int main(){    while (scanf("%d", &n) == 1) {        l = 1, r = -1;        for (int i = 1; i <= n; i++) {            scanf("%d", &a[i]);            r = max(r, a[i]);        }        scanf("%d", &k);        if (k == 1) printf("%d\n", r);        else {            while (l <= r) {                int mid = l + (r - l) / 2;                if (solve(mid)) {                    ans = mid;                    r = mid - 1;                }                else l = mid + 1;            }            printf("%d\n", ans);        }    }    return 0;}