AtCoder Beginner Contest 174 比赛人数9817
AtCoder Beginner Contest 174 E Logs 二分长度统计切割次数
总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc174/tasks/abc174_e
题目大意:给定n根不同长度的原木,要求总共最多切割k次,存在多种切割方式,求输出切割后最长原木段的最小值。
基本思路:二分长度统计切割次数。
#include <stdio.h>
#define maxn 200010
int n,k,a[maxn];
int judge(int x){
int i,cnt=0;
for(i=1;i<=n;i++)
cnt+=(a[i]-1+x)/x-1;//(a[i]-1+x)/x用来统计原木分割的段数((a[i]-1+x)/x此种写法是常见技巧),切割次数=段数-1
if(cnt>k)return 0;//切割次数过多
else return 1;//切割次数小于等于k
}
int main(){
int i,l,r,mid;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
l=0,r=1000000000;
while(l+1<r){
mid=(l+r)/2;
if(judge(mid))r=mid;
else l=mid;
}
printf("%d\n",r);
return 0;
}