1 条题解
-
0
自动搬运
来自洛谷,原作者为

EasonLiang
**搬运于
2025-08-24 23:11:47,当前版本为作者最后更新于2025-01-26 15:17:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
每个剖分形成的三角形,将多边形的边分为了三组。将这三组边按顺时针方向记为 三个集合,那么考虑从某个集合中的边进入,再从另一集合中的边走出,穿过该三角形所造成的贡献:
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次左转;
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次右转;
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次左转;
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次右转;
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次左转;
- 以 中的边为入边、 中的边为出边,穿过该三角形时进行了一次右转。
那么我们只需对于每个三角形计算贡献即可。统计贡献可以通过前缀和优化做到线性。
接下来我们只需考虑如何线性求出每个三角形的顶点编号。
首先我们求出以 为其中两个顶点的三角形的剩下一个顶点 。不难发现, 是三角剖分中与 连边的顶点(特别地,我们认为 与 之间也有连边)中编号第二大的点,也是与 连边的顶点中编号第二小的点。
接下来,我们考虑以 为其中两个顶点、以 为其中两个顶点,且顶点不为 三个编号的三角形。
- 对于其中两个顶点为 的三角形,它的剩下一个顶点 是与 连边的顶点中编号第二小的顶点;
- 对于其中两个顶点为 的三角形,它的剩下一个顶点 是与 连边的顶点中编号第二大的顶点。
然后我们可以继续递归考虑以 、、、 为其中两个顶点的三角形。不难证明这样一定可以不重不漏地遍历所有三角形。而递归的过程只需要知道与每个 连接的顶点中编号次大/次小的顶点,这个显然可以线性求出。
总时间复杂度 ,std 最大点跑了 150ms 不到。
Bonus: 如何在线性时间内求出 与 ?
- 1
信息
- ID
- 11385
- 时间
- 500ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者