n个钢管,能否分为k个1,能否分为k个2,......(用li/ l表示一个钢管最多可以切割为几个长度l的钢管)
问题转换为二分答案
1111...0000: 假设第i个位置的1表示能切割为k个i,0表示不能,求最后一个1的位置即可
代码
#include#include 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



