2 条题解

  • 0
    @ 2025-10-8 17:01:41
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long LL;
    const int N=110000;
    int n, m, a[N], b[N];
     
    bool check(int x)
    {
        int s=0, tm=1;
        for(int i=1;i<=n;i++)
        {
            s=s+b[i];
            if(s>=x)
            {
                tm++;if(tm>m)return 1;
                s=0;
            } 
        }
        return tm>m;
    }
    int main()
    {
        scanf("%d%d", &n, &m);for(int i=1;i<=n;i++) scanf("%d", &a[i]);
        sort(a+1, a+n+1);
        int l=0, r=a[n]-a[1], ans=0;
        for(int i=2;i<=n;i++) b[i-1] = a[i] - a[i-1];
        n--;m--;
        while(l<=r)
        {
            LL mid=(l+r)/2;
            if(check(mid)) l=mid+1, ans=mid;    
            else          r=mid-1;
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:01:27
      #include<bits/stdc++.h> 
      using namespace std;
      typedef long long LL;
      const int N=110000;
      int n,m,a[N],b[N];
       
      bool check(int x)
      {
          int s=0,tm=1;
          for(int i=1;i<=n;i++)
          {
              s=s+b[i];
              if(s>=x)
              {
                  tm++;if(tm>m)return 1;
                  s=0;
              } 
          }
          return tm>m;
      }
      int main()
      {
          scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);
          sort(a+1,a+n+1);
          int l=0,r=a[n]-a[1],ans=0;
      	for(int i=2;i<=n;i++)b[i-1]=a[i]-a[i-1];
      	n--;m--;
          while(l<=r)
          {
              LL mid=(l+r)/2;
              if(check(mid))l=mid+1,ans=mid;    
              else          r=mid-1;
          }
          printf("%lld\n",ans);
          return 0;
      }
      • 1

      *【二分】最小值最大[USACO05FEB] 进击的奶牛 Aggressive Cows G

      信息

      ID
      2603
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      170
      已通过
      61
      上传者