概述
首先很难想到用二分,其次判断时要用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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复