AtCoder Beginner Contest 174 比赛人数9817
AtCoder Beginner Contest 174 E Logs 二分长度统计切割次数
总目录详见https://blog.csdn.net/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;
}
本文解析了AtCoder Beginner Contest 174中E题Logs的解决方案,通过二分法寻找在限定切割次数下,原木段最大长度的最小值。代码实现展示了如何统计切割次数并确定最优解。

2743

被折叠的 条评论
为什么被折叠?



