Triangles 题解
EasonLiang · · 题解
每个剖分形成的三角形,将多边形的边分为了三组。将这三组边按顺时针方向记为
- 以
S 中的边为入边、T 中的边为出边,穿过该三角形时进行了一次左转; - 以
S 中的边为入边、U 中的边为出边,穿过该三角形时进行了一次右转; - 以
T 中的边为入边、U 中的边为出边,穿过该三角形时进行了一次左转; - 以
T 中的边为入边、S 中的边为出边,穿过该三角形时进行了一次右转; - 以
U 中的边为入边、S 中的边为出边,穿过该三角形时进行了一次左转; - 以
U 中的边为入边、T 中的边为出边,穿过该三角形时进行了一次右转。
那么我们只需对于每个三角形计算贡献即可。统计贡献可以通过前缀和优化做到线性。
接下来我们只需考虑如何线性求出每个三角形的顶点编号。
首先我们求出以
接下来,我们考虑以
- 对于其中两个顶点为
1, x 的三角形,它的剩下一个顶点y 是与x 连边的顶点中编号第二小的顶点; - 对于其中两个顶点为
x, n 的三角形,它的剩下一个顶点z 是与x 连边的顶点中编号第二大的顶点。
然后我们可以继续递归考虑以
总时间复杂度
Bonus: 如何在线性时间内求出