问题标题: 酷町堂:1292 最大长度(maxlen)

0
0

0
已采纳
贾文卓
贾文卓
高级光能
高级光能

@谢祎恒 就是说,你如果不拼接木棍的话,可能会剩下一些余料用不了,但是你一拼接(就是说累加总长度)的话就有可能利用原来的余料切成了更多的小木块。

至于二分,大体代码如下:

int l=1,r=木棍总长度;
while(l<=r)
{
    int mid=(l+r)/2;//二分答案。
    if(c(mid)>=k)//如果能切割成的木块数量大于等于要求数量
        l=mid+1;//提高要求。
    else r=mid-1;//降低要求。
}

解释:

1.c(mid)是一个函数,返回值为以mid为标准长度所能切割的最多木块数量。

2.最后的答案是r(很好理解,从循环里出来之后,l>r,如果答案是一个浮点型,这时候长度少一些肯定可以,但是多一些就达不到目标了)。

0
0
贾文卓
贾文卓
高级光能
高级光能

你这样肯定是错的。

首先,木棍是不能拼接的。

比如说:

3 3

1 2 3

照你那样,答案是(1+2+3)/3=2,但是实际上是1。

还有,这道题目数据太大了,暴力枚举是肯定不行的,要用二分。

0
我要回答