1 条题解

  • 0
    @ 2025-2-14 21:11:41

    C :

    #include <stdlib.h>
    #include <stdio.h>
    
    int x[100005],N,C;
    int cmp(const void *a, const void *b)
    {
        return(*(int *)a-*(int *)b);
    }
    int f(int a)
    {
        int i,s=1,p=0;
        for(i=1; p+i<N; i++)
        {
            if(x[p+i]-x[p]>=a)
            {
                p=p+i;
                s++;
                i=0;
            }
        }
        if(s>=C) return 1;
        else return 0;
    }
    int main()
    {
        int i,a,b,c,ans;
        while(~scanf("%d%d",&N,&C))
        {
            for(i=0; i<N; i++) scanf("%d",&x[i]);
            qsort(x,N,sizeof(x[0]),cmp);
            a=1;
            b=x[N-1]-x[0];
            while(a<=b)
            {
                c=(a+b)/2;
                if(f(c))
                {
                    a=c+1;
                    ans=c;
                }
                else b=c-1;
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    
    

    C++ :

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[100010],n,c;
    bool greed( int t)
    {
        int i,j=a[0],count=0;
        for(i=0;i<n;i++)
        {
            if(a[i]-j>=t) {j=a[i];  count++;}
            if(count>=c-1) return true;
    
        }
        return false;
    }
    void binary_search()
    {
        int front=0,end=a[n-1]-a[0];
        int mid;
    
        while(front<=end)
        {
            mid=(front + end )/2;
            if(greed(mid))
                front=mid+1;
               else end=mid-1;
        }
        printf("%d\n",front-1);
    }
    int main()
    {
        int i;
        while(scanf("%d %d",&n,&c)!=EOF)
        {
            for(i=0;i<n;i++)
              scanf("%d",&a[i]);
              sort(a,a+n);
              binary_search();
        }
        return 0;
    }
    
    
    • 1

    信息

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