萌新刚学二分,为什么边界不能这样设?
查看原帖
萌新刚学二分,为什么边界不能这样设?
177247
little_li楼主2021/11/20 20:27
#include <bits/stdc++.h>
using namespace std;

int n, k, l[(int)1e5+5];

bool check(int len) {
	int ans = 0;
	for(int i = 1; i <= n; i ++) ans += (l[i] / len);
	if(ans <= k) return 0;
	else return 1;
}

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
	return x * f;
}

int main() {
	
	n = read(), k = read();  
	for(int i = 1; i <= n; i ++) l[i] = read();
	
	int l = 1, r = 1e9+7;
	while(l < r) {
		int mid = (l + r) >> 1;
		if(!check(mid)) r = mid;
		else l = mid+1;
	}
	
	printf("%d", l);
	
	exit(0);
}
2021/11/20 20:27
加载中...