问题 3805 --聪明的木匠(完善程序)

3805: 聪明的木匠(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 147  解决: 61
[提交][状态][命题人:]

题目描述

Eddie爸爸要在老家盖一幢纯木材打造的别墅,高薪聘请了一个聪明的木匠。现在有n根木棍,每根木棍的长度已知且均为正整数。木棍可以以任意正整数长度切割,但不可以连接。现在要从这些木棍中切割出m条长度相同的小木段,求小木段的最大长度是多少。

比如有十根长度分别1,2,3,4,5,6,7,8,9,10的木棍,要切割得到24条小木段。如果小木段长度为3,则最多能切割出15条小木段(15=10/3+9/3+8/3+7/3+6/3+5/3+4/3+3/3);如果小木段长度为2,则最多能切割出25条小木段,满足要求,故答案为2。

#include <iostream>
using namespace std;
int n, m, i,lbound, ubound, mid, count;
int len[1000000];  // 木棍长度
int main()
{
    cin >> n;
    count = 0;
    for (i = 0; i < n; i++)
    {
        cin >> len[i];
        ____(1)_____;
    }
    cin >> m;
    if(____(2)______)
    {
        cout << "Fired" <<endl;
        return 0;
    }
    lbound = 1;
    ubound = 1000000;
    while (______(3)__________)
    {
        mid = ______(4)__________;
        count = 0;
        for (i = 0; i < n; i++)
            _____(5)________;
        if (count < m)
            ubound = mid - 1;
        else
            lbound = mid;
    }
    cout << lbound << endl;
    return 0;
}

输入

第一行是一个不超过1000000的正整数n,

第二行是n个不超过1000000的正整数,表示每根木棍的长度,

第三行是一个不超过100000000d的正整数m。

输出

小木段的最大长度,若无法切割,输出Fired。
样例输入
Copy
10
1 2 3 4 5 6 7 8 9 10
24
样例输出
Copy
2

提示

来源

[提交][状态]