P0954

[Ctsc2010杀菌计划]

[Ctsc2010杀菌计划]

栋栋有一个凸多面体形状的漂亮盒子。盒子的每个面均由凸多边形状的透明玻璃薄壁组成。

每隔一段时间,栋栋都会使用激光发射器给盒子杀菌。激光发射器能够发射一束激光。当激光照射到盒子的玻璃薄壁时,会杀死薄壁内外两面的细菌,同时有大量光线透射过玻璃,少量光线被玻璃反射。

透射光线沿原方向继续传播。反射光线遵循镜面反射定律:反射光线、入射光线和镜面法线位于同一平面内;反射光线与入射光线分居法线两侧;反射角,即反射光线与法线的夹角,等于入射角,即入射光线与法线的夹角。

我们认为,激光经过 kk 次反射后,能量已不足以杀死细菌。即使有多束这样的光线同时照射在玻璃薄壁上,也无法杀死细菌;而在第 kk 次反射之前,激光照射到的细菌都会被杀死。

激光发射器的发射口是三角形。发射激光时,整个发射口都会发出激光。给定盒子与激光发射器的位置,请计算盒子的玻璃薄壁上有多大面积的细菌被杀死。由于盒子内外两面的细菌必然同时被杀死或同时不被杀死,因此只需计算盒子外表面上被杀死的细菌面积。

激光或经过反射的激光可能与某些表面平行,但数据保证它们不会照射到与其平行的表面。

输入格式

第一行包含三个整数 n,m,kn,m,k,分别表示盒子的顶点数、盒子的面数和光线的反射次数。

接下来 nn 行,第 ii 行包含三个实数 xi,yi,zix_i,y_i,z_i,表示盒子第 ii 个顶点的坐标。

接下来 mm 行,每行描述盒子的一个表面。第 jj 行首先包含一个整数 tjt_j,表示该表面对应多边形的顶点数;随后包含 tjt_j 个整数,表示这些顶点在盒子顶点中的编号。编号按照顶点在该表面上的顺时针或逆时针顺序给出。

接下来三行,每行包含三个实数 x,y,zx,y,z,表示激光发射器三角形发射口的一个顶点坐标。

最后一行包含三个实数 Δx,Δy,Δz\Delta x,\Delta y,\Delta z,表示出射光线沿向量 (Δx,Δy,Δz)(\Delta x,\Delta y,\Delta z) 的方向传播。

同一行中相邻的两个数之间以一个空格分隔。

输出格式

输出一个实数,表示被杀死的细菌的面积,四舍五入保留两位小数。

如果同一个表面区域被多次照射,其面积只计算一次。

样例输入

8 6 1
0.0 0.0 0.0
0.0 0.0 1.0
0.0 1.0 1.0
0.0 1.0 0.0
1.0 0.0 0.0
1.0 0.0 1.0
1.0 1.0 1.0
1.0 1.0 0.0
4 2 3 7 6
4 5 6 7 8
4 1 2 3 4
4 1 2 6 5
4 4 3 7 8
4 1 4 8 5
2.0 0.33 0.25
2.0 0.67 0.25
2.0 0.33 0.75
-1.0 0.0 0.0

样例输出

0.17

数据范围

  • 原题未给出明确的数据范围。

来源与许可

本题为 CTSC 2010 试题「杀菌计划」,题面与测试数据整理自 BZOJ。

样例 1

输入

8 6 1
0.0 0.0 0.0
0.0 0.0 1.0
0.0 1.0 1.0
0.0 1.0 0.0
1.0 0.0 0.0
1.0 0.0 1.0
1.0 1.0 1.0
1.0 1.0 0.0
4 2 3 7 6
4 5 6 7 8
4 1 2 3 4
4 1 2 6 5
4 4 3 7 8
4 1 4 8 5
2.0 0.33 0.25
2.0 0.67 0.25
2.0 0.33 0.75
-1.0 0.0 0.0

输出

0.17