3 solutions

  • 2
    @ 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;
    }
    
    • 1
      @ 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;
      }
      
      • 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
        20
        Accepted
        10
        Uploaded By