题解第一个,为什么是while(l+1<r)而不是while(l<r),区别?
  • 板块P2440 木材加工
  • 楼主A_pier
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/11/5 17:23
  • 上次更新2023/11/4 01:23:34
查看原帖
题解第一个,为什么是while(l+1<r)而不是while(l<r),区别?
571939
A_pier楼主2021/11/5 17:23

下面是题解区第一个题解的代码,求大佬指点下

#include <queue>
#include <stack>
#include <cmath>
#include <string>
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

long long n, k;
long long a[1000005];

bool f(long long x) {
	long long ans = 0;
	for (int i = 1; i <= n; i++) {
		ans += a[i] / x;
	}
	return ans >= k;
}

int main() {
	cin >> n >> k;
	for (int i = 1; i <= n; i++) cin >> a[i];
	
	long long l = 0, r = 100000001;
	long long mid;
	
	while (l + 1 < r) {
		mid = (l + r) / 2;
		if (f(mid)) l = mid;
		else r = mid;
	}
	cout << l << endl;
	return 0;
} 

2021/11/5 17:23
加载中...