https://ac.nowcoder.com/acm/problem/23049
题意:被给予n根木棍,华华需要k根,华华可以将每根木棍裁剪成若干段自己想要的长度,并丢掉多余的部分,华华不知道裁剪成多长比较好,所以干脆越长越好。不过由于华华有点强迫症,所以他希望长度为非负整数。
思路:二分寻找长度
代码
#include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000007 int a[200005]; int n, k; int fun(int z) { ll s=0; for(int i=0;i<n;i++) { s=s+a[i]/z; } if(s>=k) { return 1; } return 0; } int erfen(int l,int r) { while(r-l>1) { int z=(l+r)/2; if(fun(z)) { l=z; } else { r=z; } } return l; } int main() { scanf("%d %d",&n,&k); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } int z=erfen(0,1000000001); printf("%d\n",z); return 0; }