假设有一些光源和许多球形气球。所有光源的尺寸都足够小,可以建模为点光源,并且它们向所有方向发射光线。气球的表面吸收光线且不反射光线。令人惊讶的是,在这个世界中,气球可能会重叠。
你希望目标点处的总光照强度尽可能高。为此,可以移除一些阻挡光线的气球。然而,由于移除成本,可以移除的气球数量存在一定的限制。因此,你希望移除合适的一组气球,以使目标点处的总光照强度最大化。
下图展示了下面给出的样例输入中第一个数据集所指定的配置。该图显示了 $xy$ 平面,这已经足够了,因为在这个数据集中,所有光源、气球中心和目标点的 $z$ 坐标均为零。在图中,光源表示为星号,气球表示为圆圈。目标点位于原点,你最多可以移除 4 个气球。在这种情况下,图中的虚线圆圈对应于要移除的气球。
图 G.1:样例输入的第一个数据集。
输入格式
输入由一系列数据集组成。每个数据集的格式如下:
N M R S1x S1y S1z S1r ... SNx SNy SNz SNr T1x T1y T1z T1b ... TMx TMy TMz TMb Ex Ey Ez
数据集的第一行包含三个正整数 $N$、$M$ 和 $R$,由单个空格分隔。$N$ 表示气球的数量,不超过 2000。$M$ 表示光源的数量,不超过 15。$R$ 表示可以移除的气球数量,不超过 $N$。
接下来的 $N$ 行中,每行包含四个由单个空格分隔的整数。$(S_{ix}, S_{iy}, S_{iz})$ 表示第 $i$ 个气球的中心位置,$S_{ir}$ 表示其半径。
接下来的 $M$ 行中,每行包含四个由单个空格分隔的整数。$(T_{jx}, T_{jy}, T_{jz})$ 表示第 $j$ 个光源的位置,$T_{jb}$ 表示其亮度。
数据集的最后一行包含三个由单个空格分隔的整数。$(E_x, E_y, E_z)$ 表示目标点的位置。
$S_{ix}, S_{iy}, S_{iz}, T_{jx}, T_{jy}, T_{jz}, E_x, E_y$ 和 $E_z$ 均大于 $-500$ 且小于 $500$。$S_{ir}$ 大于 $0$ 且小于 $500$。$T_{jb}$ 大于 $0$ 且小于 $80000$。
在目标点处,如果没有任何气球阻挡光线,来自第 $j$ 个光源的光照强度与距离的平方成反比,即:
$$\frac{T_{jb}}{(T_{jx} - E_x)^2 + (T_{jy} - E_y)^2 + (T_{jz} - E_z)^2}$$
总光照强度为上述各项之和。
你可以做出以下假设:
- 目标点与任何光源之间的距离不小于 1。
- 对于每个 $i$ 和 $j$,即使 $S_{ir}$ 改变了 $\epsilon$ ($|\epsilon| < 0.01$),第 $i$ 个气球是否遮挡第 $j$ 个光源的状态也不会改变。
输入结束的标志是包含三个零的一行。
输出格式
对于每个数据集,输出一行,包含一个十进制小数,表示移除最多 $R$ 个气球后,目标点处可能达到的最高总光照强度。输出的误差不应超过 $0.0001$。
样例
输入样例 1
12 5 4 0 10 0 1 1 5 0 2 1 4 0 2 0 0 0 2 10 0 0 1 3 -1 0 2 5 -1 0 2 10 10 0 15 0 -10 0 1 10 -10 0 1 -10 -10 0 1 10 10 0 1 0 10 0 240 10 0 0 200 10 -2 0 52 -10 0 0 100 1 1 0 2 0 0 0 12 5 4 0 10 0 1 1 5 0 2 1 4 0 2 0 0 0 2 10 0 0 1 3 -1 0 2 5 -1 0 2 10 10 0 15 0 -10 0 1 10 -10 0 1 -10 -10 0 1 10 10 0 1 0 10 0 260 10 0 0 200 10 -2 0 52 -10 0 0 100 1 1 0 2 0 0 0 5 1 3 1 2 0 2 -1 8 -1 8 -2 -3 5 6 -2 1 3 3 -4 2 3 5 1 1 2 7 0 0 0 5 1 2 1 2 0 2 -1 8 -1 8 -2 -3 5 6 -2 1 3 3 -4 2 3 5 1 1 2 7 0 0 0 0 0 0
输出样例 1
3.5 3.6 1.1666666666666667 0.0