最大靠墙矩形 题解 (单调性)

s表示所有木条的总长度,用w表示墙的对边的长度。根据均值不等式,在w∈[0,s]的范围内,面积w(s-w)/2是关于 w 的单峰函数,且最值在 w = s时取得

 

这个题比较难。

 

两个极为重要的性质:

不论如何锯木头,矩形总有一条边是原木棍拼成的。

对于总长度为n的一堆木棍,使用一次锯木头的机会的条件下总可以把它变为两根任意 长的木棍,且两根木棍的总长度为n。

那么问题就迎刃而解了,用原木棍拼成的那个木棍组成的那一条边是墙的对边或者邻边:

对于对边:

我们知道面积是一个关于对边的二次函数,设木棍总长度为n,我们只需要对边的长度 最接近n/2即可(二次函数),剩余的其它木棍可以组成另外两条相同的边。

至于如何找到这个最接近n/2的长度,木棍才40根,当然是搜索了。

不过直接搜索显然会超时(40!),所以我们把原木棍分为两堆分别搜索出它们可能拼 接成的所有长度并用数组存下来。

将第一堆的可能结果从小到大排序,第二堆的可能结果从大到小排序。然后可以利用其 单调性用走指针的方式(大了就第二堆指针加,小了就第一堆指针加)就可以求出最接 n/2的长度是多少。

对于邻边

和对边一样的方法。

最难的地方:

double大概只能精确存储2^50左右大小的数字,当其太大的时候,精度会有损失。

本题的答案太大导致不能用double直接输出,显然答案的小数要么是.0要么是.5,需要把答案转为long long通过特判的方式输出小数点。

posted @ 2021-07-12 20:54  lei_yu  阅读(144)  评论(0编辑  收藏  举报