我是靠谱客的博主 追寻海燕,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部