答案不对
查看原帖
答案不对
1233392
RY111楼主2024/7/24 10:46

如果cnt>c;那么这个距离太大了,并且不包括答案,所以r=mid-1; 如果cnt<=c,这个距离太小了,并且可能包括答案,所以l=mid; 为啥不对呢

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e5+10;
int n,c;
int a[maxn]= {0};
int d[maxn];
bool check(int mid)
{
	int cnt=0;
	for(int i=1; i<=n; i++)
	{
		if(d[i]<mid)
		{
			cnt++;
			d[i+1]=d[i]+d[i+1];
		}
	}
		
	if(cnt>c)
		return true;
	return false;
}
int bs(int l,int r)
{
	while(l<r)
	{
		int mid=(l+r+1)>>1;
		if(check(mid))
			r=mid-1;
		else
			l=mid;
	}
	return l;
}
int main()
{
	cin>>n>>c;
	for(int i=1; i<=n; i++)
	{
		cin>>a[i];
	
}


	sort(a+1,a+1+n);
	for(int i=1; i<=n; i++)
	{
		d[i]=a[i]-a[i-1];
	
	}
		

	cout<<bs(1,maxn/2);


	return 0;
}
2024/7/24 10:46
加载中...