n个钢管,能否分为k个1,能否分为k个2,......(用li/ l表示一个钢管最多可以切割为几个长度l的钢管) 问题转换为二分答案 1111...0000: 假设第i个位置的1表示能切割为k个i,0表示不能,求最后一个1的位置即可 代码 登录后复制 #include<iostream> #include<algorithm> using namespace std; int n,k; int a[100001]; bool check(int mid){ int ans=0; for(int i=n;i>=1;i--){ ans+=a[i]/mid; if(ans>=k){ return true; } } return false; } int main(){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+1+n); int left=1; int right=10000; while(left<right){ int mid=(left+right)/2; if(check(mid)){ left=mid+1; } else{ right=mid; } } cout<<right-1; return 0; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813552