题目链接:
http://bailian.openjudge.cn/practice/2774
Version 1.0 (2014-11-01)
Memory = 260 kb
Time = 0 ms
#include <stdio.h>
int Lens[10000];
int n, Count;
int TotalLen;
int findmax(int l, int r)
{
if (r - l <= 1)
return l;
int ctry = (l + r) >> 1;
int ctmp = 0;
for (int i = 0; i < Count; i++)
ctmp += Lens[i] / ctry;
if (ctmp >= n)
return findmax(ctry, r);
else
return findmax(l, ctry);
}
int main()
{
scanf("%d %d", &Count, &n);
for (int i = 0; i < Count; i++) {
scanf("%d", Lens + i);
TotalLen += Lens[i];
}
if (TotalLen < n)
printf("0");
else if (TotalLen < 2 * n)
printf("1");
else
printf("%d", findmax(2, TotalLen / n));
return 0;
}
本文介绍了一种使用C语言实现的二分查找算法,该算法用于从一系列长度不等的整数中找到最大的整数,使得这些整数除以该最大整数所得商的总和大于等于指定值。文章提供了完整的源代码,并详细解释了如何通过递归方式缩小搜索范围以提高查找效率。
1234

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



