ABC312E:Tangency of Cuboids
E比F,G都难是我没有料到的。
考场上想到维护三个方向,对于每一维做二维前缀和,然后直接查询 \(\div4\),但是这样会使得只有一点接触以及一边等的情况无法处理。
官方题解:
我们不妨考虑对于每个长方体的每个小正方体(对角线为 \((x,y,z),(x+1,y+1,z+1)\)),只要它们之间有接触,那么大长方形也一定会有接触。
于是我们可以考虑记录 \(100^3\) 这些小正方形是属于哪个长方体的,因为长方体没有交集,所以就是这么大。然后枚举它们与三维的六个方向(其实只需要枚举三个方向,因为我们可以钦定小的坐标检查大的)是否有碰到,然后将关系丢到 set
里去重即可。时间复杂度 \(O(100^3\log n)\),亦可用哈希表优化掉 \(\log\)。