题目传送门:【BZOJ 1052】
题目大意:某人在山上种了 N 棵小树苗。冬天来了,温度急速下降,小树苗脆弱得不堪一击,他决定用 3 个 L * L 的正方形塑料薄膜将小树遮起来。
我们将山建立一个平面直角坐标系,设第 i 棵小树的坐标为(
题目分析:
这道题的解题思路比较容易想到。不过我用的搜索,对于这种类型嘛……我一向做搜索题都做得——超超超超超级复杂,在此表示如果有神犇或 dalao 觉得我代码丑的请轻喷╮(╯▽╰)╭
首先,看到“求薄膜能够覆盖完所有树苗的面积的最小值”时,直接想到二分膜的面积。我们把每棵树看成一个点,先用一个矩形将所有的点包围起来,这样便确定了二分上界。
判断时,首先我们将第一个薄膜放在四个角中的一个角上(这样可以保证放的是最优的,因为这样能尽量多地覆盖位于矩形边上的点)。在放第二块薄膜时,我们以同样的操作,先用一个矩形将剩下未被覆盖的点包围起来,然后像之前那样,将第二块薄膜放在新矩形四个角中的一个角上。对于第三块膜,我们直接判断最后所有剩下的点的横纵坐标能否被第三块膜覆盖完,如果能,则将面积缩小并继续查找;否则增大膜的面积。
.
Orz…
这道题我写了 240 行,5000 多字节的代码……
看到其他好多人 80 行解决问题……
果然我搜索还是写的不好……不过还是跑得比较快……
下面附上代码: