首先很难想到用二分,其次判断时要用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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复