二分答案为什么是l
查看原帖
二分答案为什么是l
773653
Wang_Andy楼主2024/8/23 11:09

为什么最终答案是l不是mid?

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[100005];
bool check(int x)
{
	int sum=0;
	for(int i=1;i<=n;i++)sum+=a[i]/x;
	return sum>=k;
}
main()
{
	int ma=INT_MIN;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		ma=max(ma,a[i]);
	}
	sort(a+1,a+n+1);
	int l=0,r=ma+1,mid;
	while(l+1<r)
	{
		mid=l+(r-l)/2;
		if(check(mid))l=mid;
		else r=mid;
	}
	cout<<l<<'\n';
	return 0;
}
2024/8/23 11:09
加载中...