好题!
题意:
给定一个由一系列长方体构成的雕塑,求其表面积和体积(包括内部空心部分)。
看起来好像很简单的计算几何(?)题,实现起来并不简单……
- 体积相对容易处理,放进坐标系后用dfs/bfs跑一遍floodfill,记得把内部空心的部分体积也加上(但这一步比较麻烦)。
- 表面积挺难想的:对整个雕塑外部的“一层”空间跑floodfill,这样得到的面积和就是表面积。
- 想到这种办法后,不难发现可以用类似的办法简化体积计算:我们在对雕塑的外层空间floodfill时可以顺便计算其体积$V_1$,然后只对新加上的外层空间进行floodfill得到$V_2$,这样用$V_1-V_2$就可以得到要求的雕塑体积。
- 但还没做完,这题的数据范围最大到500,也就是说最多要占用$500^3=10^8$的空间,且不论时间复杂度,空间已经爆了……因此还需要进行坐标离散化。
- 额外的坑点:如果使用C++万能头文件则不能定义名为y0或y1的变量,因为这两个变量在
bits/mathcalls.h
中已经有定义了……
类似的(伪)计算几何题似乎都很适合练习面向对象编程啊?
其实这题难在最后通过离散化的坐标得到原来的信息 注意到坐标i其实保存的是x[i]的信息
而且如果用点(x,y,z)来表示一个三维的方块的话,那么这个立方体的体积就是
(x[i+1]-x[i])(y[i+1]-y[i])(z[i+1]-z[i])