7 条题解

  • 3
    @ 2025-3-18 16:40:39
    #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){
                ans=mid;
                l=mid+1;
            }
            else
                r=mid-1;
        }
        cout<<ans;
        return 0;
     }
    
    
    
    • 3
      @ 2022-11-5 16:20:07
      using namespace std;
      int n, k, a[100005], max_a=-1;
      int check(int kk){
      int   ret=0
      for(int j=0; j<n; i++)
      ret+=a[i]/kk
      return ret
      }
      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){
      ans=mid;
      l=mid+1;
      }
      else
      r=mid-1;
      }
      cout<<ans;
      return 0;
      }
      
      • 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]里面使用二分查找 算法,查询答案。
          
        
        
        
        • 0
          @ 2025-3-18 16:44:02

          easy

          #include<bits/stdc++.h>
          using namespace std;
          int n,k,a[100005],max_a=-1;
          
          int check(int kk){
          	int ret=0;
              for(int i=0; i<n; i++)ret+=a[i]/kk;
          	return ret;
          }
          
          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){
          			ans=mid;
          			l=mid+1;
          		}else{
          			r=mid-1;
          		}
          	}
          	cout<<ans;
          	return 0;
          }
          
          
          
          
          
          • 0
            @ 2025-3-18 16:42:30
            #include<bits/stdc++.h>
            using namespace std;
            int n, k, a[100005], max_a=-1;
            int check(int k){
            int   ret=0;
            for(int j=0; j<n; j++)
            ret+=a[j]/k;
            return ret;
            }
            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){
            ans=mid;
            l=mid+1;
            }
            else
            r=mid-1;
            }
            cout<<ans;
            return 0;
            }
            小鸟
            
            
            • -2
              @ 2021-12-25 20:51:16
              #include<bits/stdc++.h>
              using namespace std;
              int n, k, a[100005], max_a=-1;
              int check(int kk){
                  int   ret=0;
                  for(int i=0; i<n; i++)
                      ret+=a[i]/kk;
                  return ret;
              }
              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;  //搜索范围是[1,max_a]
                  int ans=0;  //初始化假定无解为0
                  while(l<=r){
                      int mid=(l+r)/2;
                      if(check(mid)>=k){    //如果以mid长度切木头获得的段数>=k,则说明ans偏小
                          ans=mid;
                          l=mid+1;
                      }
                      else
                          r=mid-1;
                  }
                  cout<<ans;
                  return 0;
               }
              
              • -5
                @ 2021-12-25 20:43:21

                ''' a a

                • 1

                信息

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