1 条题解

  • 0
    @ 2024-11-19 20:28:35

    本题二分答案

    二分查找每一个可能的disdis

    判断是否符合所有牛都可以住下
    不符合就让rr左移,符合就让ll右移并更新ansans

    显而易见,ansans最后一定是最优结果

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+7;
    int n,c,dis[N];
    bool check(int ds){
    	int cnt=1,place=0;
    	for(int i=1; i<n; i++){
    		if(dis[i]-dis[place]>=ds){
    			place=i;
    			cnt++;
    		}
    	}
    	if(cnt>=c)return true;
    	return false;
    }
    int main(){
    	cin>>n>>c;
    	for(int i=0; i<n; i++)
    		cin>>dis[i];
    	sort(dis,dis+n);
    	int l=0,r=dis[n-1]-dis[0],ans=0;
    	while(l<r){
    		int mid=l+(r-l)/2;
    		if(check(mid))ans=mid,l=mid+1;
    		else r=mid;
    	}
    	cout<<ans;
    	return 0;
    }
    
    

    信息

    ID
    5879
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    19
    已通过
    11
    上传者