1 条题解
-
0
思路
二分类问题有几个明显的特征: 1.具有单调性:如果对于一个数,它能够满足题目的要求,那么所有大于他(或者是小于他)的数也能满足要求。 2.求出满足条件的值很难,但是判断一个数是否满足条件简单。
注意到这道题,如果你能让最大的木头长度为,那么对于所有的满足一定可以做到最长的木头长度为。
另外,如果已经知道最长木头的长度为,也很好判断是否可以再刀内解决。只需要假设所有的木头都长度为,计算每段木头要切几刀,最终判断即可。
AC代码
#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+10; int cel(int a,int b){return (int)(ceil(1.0*a/b));} int a[N],n,k; bool check(int x) { int cnt=0; for(int i=1;i<=n;i++)cnt+=cel(a[i],x)-1; return cnt<=k; } signed main() { scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); int l=1,r=1000000000,ans; while(l<=r) { int mid=l+r>>1; if(check(mid))r=mid-1,ans=mid; else l=mid+1;; } printf("%lld\n",ans); return 0; }
- 1
信息
- ID
- 11944
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者