7 条题解

  • 3
    @ 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: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;
       }
      
      
      
      • 0
        @ 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;
        }
        
        • -1
          @ 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]里面使用二分查找 算法,查询答案。
            
          
          
          
          • -3
            @ 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;
            }
            小鸟
            
            
            • -3
              @ 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;
               }
              
              • -7
                @ 2021-12-25 20:43:21

                ''' a a

                • 1

                信息

                ID
                1277
                时间
                1000ms
                内存
                256MiB
                难度
                6
                标签
                递交数
                215
                已通过
                68
                上传者