3 solutions

  • 2
    @ 2025-5-31 9:29:59
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N];
    int n,m;
    bool check(int x) //枚举最近距离 
    {
        int last=a[1],cnt=1;
        for(int i=2;i<=n;i++)
        {
            if(a[i]-last>=x) //可以放下一头牛 
            {
                cnt++;
                last=a[i]; //更新距离 
            }
        }
        return cnt>=m;
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1); //牛棚位置排序 
        int l=0,r=a[n];
        while(l<r)
        {
            int mid=l+r+1>>1;
            if(check(mid)) l=mid;
            else r=mid-1;
        }
        cout<<l;
        return 0;
    }
    
    • 1
      @ 2025-3-29 15:10:28
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int a[N];
      int n,m;
      bool check(int x)
      {
      	int last=a[1],cnt=1;
      	for(int i=2;i<=n;i++)
      	{
      		if(a[i]-last>=x)
      		{
      			cnt++;
      			last=a[i];
      		}
      	 }
      	 return cnt>=m;
      }
      int main()
      {
      	cin>>n>>m;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>a[i];
      	}
      	sort(a+1,a+n+1);
      	int l=0,r=a[n];
      	while(l<r)
      	{
      		int mid=l+r+1>>1;
      		if(check(mid)) l=mid;
      		else r=mid-1;
      	}
      	cout<<l;
      	return 0;
      }
      
      • 0
        @ 2025-3-29 15:09:46
        #include<bits/stdc++.h>
        using namespace std;
        const int N=1e5+10;
        int a[N];
        int n,m;
        bool check(int x)
        {
        	int last=a[1],cnt=1;
        	for(int i=2;i<=n;i++)
        	{
        		if(a[i]-last>=x)
        		{
        			cnt++;
        			last=a[i];
        		}
        	 }
        	 return cnt>m;
        }
        int main()
        {
        	cin>>n>>m;
        	for(int i=1;i<=n;i++)
        	{
        		cin>>a[i];
        	}
        	sort(a+1,a+n+1);
        	int l=0,r=a[n];
        	while(l<r)
        	{
        		int mid=l+r+1>>1;
        		if(check(mid)) l=mid;
        		else r=mid-1;
        	}
        	cout<<l;
        	return 0;
        }
        
        • 1

        Information

        ID
        955
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        5
        Tags
        (None)
        # Submissions
        21
        Accepted
        11
        Uploaded By