每日一题4/16,二分题解
华华给月月准备礼物
http://www.nowcoder.com/questionTerminal/9963334321e64e61a397b262708e4f65
题意:将n个木条切割,至少得到k个相同木条的最大长度是多少
思路:二分求解
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long ll num[200005]; int n,k; bool pd(ll x) { int cnt=0; for(int i=0;i<n;i++) cnt+=num[i]/x; return cnt>=k; } int main() { cin >> n >> k; ll l=1,r=1,m; for(int i=0;i<n;i++) { scanf("%lld",&num[i]); r=max(r,num[i]); } while(l<=r) { m=(l+r)>>1; if(pd(m)) l=m+1; else r=m-1; } cout << r; return 0; }