4 条题解

  • 4
    @ 2024-11-11 21:10:34
    #include<bits/stdc++.h>
    using namespace std;
    int a[100001];
    int n,m;
    bool search(int dis)
    {
    	int ans=1;int pre=1;
    	while(ans<m)
    	{
    		int low=lower_bound(a+1,a+1+n,a[pre]+dis)-a;
    		if(low>=n+1)
    		{
    			if(ans<m)
    			return false;
    			else if(ans>=m) 
    			return true;
    		}
    		else if(low<=n)
    		{
    			ans++;
    			pre=low;
    		}
    	}
    	return true;
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    	}
    	sort(a+1,a+1+n);
    	int pre;int left=1;int right=a[n];
    	while(left+1<right)
    	{
    		int mid=(left+right)/2;
    		bool p=search(mid);
    		if(p==false)
    		{
    			right=mid;
    		}
    		else
    		left=mid;
    	}
    	cout<<left;
    	return 0;
    }
    

    信息

    ID
    1012
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    43
    已通过
    10
    上传者