我是靠谱客的博主 追寻海燕,这篇文章主要介绍POJ3104-Drying,现在分享给大家,希望可以做个参考。

首先很难想到用二分,其次判断时要用long long....

#include <cstdio>
#include <algorithm>

using namespace std;

const int maxn = 10e5+10;
const int inf = 10e9+10;

int a[maxn];

bool judge(int mid, int n, int k) {
    long long minute = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] > mid) {
            minute += (a[i] - mid + k - 2) / (k - 1);
        }
    }
    return minute <= mid;
}

int main(int argc, char const *argv[]) {
    int n, k;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &k);
    if (k == 1) {
        printf("%dn", *max_element(a, a + n));
        return 0;
    }
    int left = 0;
    int right = inf;
    while (right - left > 1) {
        int mid = (left + right) / 2;
        if (judge(mid, n, k)) {
            right = mid;
        } else {
            left = mid;
        }
    }
    printf("%dn", right);
    return 0;
}


最后

以上就是追寻海燕最近收集整理的关于POJ3104-Drying的全部内容,更多相关POJ3104-Drying内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(119)

评论列表共有 0 条评论

立即
投稿
返回
顶部