7 条题解

  • 2
    @ 2025-3-18 16:59:35
    #include<bits/stdc++.h>
    using namespace std;
    int n, k, a[284099], max_a=-1;
    int check(int kk){
        int c=0;
        for(int i=0; i<n; i++)
            c+=a[i]/kk;
        return c;
    }
    int main()
    {
        cin>>n>>k;
        for(int i=0; i<n; i++)
            cin>>a[i], max_a=max(max_a,a[i]);
        int l=1, r=max_a;
        int ans=0;//保存答案 
        while(l<=r){
            int mid=(l+r)/2;//枚举答案的中间值 
            if(check(mid)>=k){//判断答案mid是否合理 
                ans=mid;//求最大值 
                l=mid+1;
            }
            else
                r=mid-1;
        }
        cout<<ans;
        return 0;
     }
     //二分答案:在答案的范围[l,r]里面使用二分查找 算法,查询答案。
      
    
    
    

    信息

    ID
    1277
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    144
    已通过
    50
    上传者