#P1294. Not Too Convex Hull

Not Too Convex Hull

描述

“钉子与橡皮筋”,这是一群孩子(他们都是几何老师的子女)玩的一个游戏的富有启发性的名字。孩子们在一块木板上固定一些钉子,钉子是随机放置的。然后他们选择其中一个钉子作为原点,并准备数量为BB的橡皮筋。

挑战在于使用BB条橡皮筋来缠绕这些钉子,需满足以下条件: (i) 每条橡皮筋缠绕钉子的一个子集;(ii) 所有钉子都被某些橡皮筋缠绕;(iii) 除了原点钉子(所有橡皮筋都接触原点钉子)外,橡皮筋的缠绕部分不相互重叠;(iv) 橡皮筋必须形成至少有三个角的凸多边形;(v) 在所有可能的缠绕钉子的方式中,缠绕区域的总面积是最小的。图1展示了这个游戏的一个实例。

输入

你的程序应该处理这个游戏的多个实例。每个游戏描述的第一行包含两个整数BBNN,分别表示橡皮筋的数量和钉子的数量(2B502 \leq B \leq 502B+1N1012B + 1 \leq N \leq 101)。接下来的NN行描述钉子的位置,每行包含两个整数XXYY10000X,Y10000-10000 \leq X, Y \leq 10000)。原点是输入中的第一个钉子。当B=N=0B = N = 0时,表示输入结束。

在输入的所有实例中:

  • 没有两个钉子在同一点;
  • 没有三个钉子在同一条直线上;
  • 原点钉子不属于所有钉子构成的凸包(也就是说,如果你用一条橡皮筋缠绕所有钉子,它不会接触原点钉子)。

输出

对于输入中的每个游戏,你的程序应该输出一行,描述缠绕区域的最小总面积。面积必须以实数形式打印,保留两位小数,最后一位小数进行四舍五入。输入中不会包含因四舍五入差异而产生显著影响的测试用例。

示例输入

2 5
0 0
9 4
-8 8
-10 -2
4 -8
2 6
0 0
3 6
-5 7
-4 -6
10 -10
3 5
0 0

示例输出

92.00
74.00

来源

2002年南美洲竞赛