1 条题解

  • 0
    @ 2025-7-1 17:52:58

    二分查找最小值

    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #define N 100010
    
    using std:: sort;
    int a[N];
    int n,m;
    int solve(int x)
    {
        int cas=0;
        int nx=1;
        for(int i=2; i<=n; i++)
        {
            if(a[i]-a[nx]>=x)
            {
                cas++;
                nx=i;
            }
        }
      return cas+1;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d",&n,&m);
            for(int i=1; i<=n; i++)
                scanf("%d",&a[i]);
            sort(a+1, a+n+1);
            int l=1,r=a[n-1]-a[0],mid;
            while(l+1<r)
            {
                mid=(l+r)/2;
                if(solve(mid)>=m)
                l=mid;
                else
                r=mid;
            }
            printf("%d\n",l);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1456
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者