不错的计算几何题。题目输入若干个简单多边形(允许存在凹多边形,但是多边形的边不会交叉),它们的质量是均匀的。要求计算每个多边形在水平线上有多少种稳定的摆放方式。其中一个比较特别的地方就是,如果重心和支撑线段所作的垂心与支撑线段的端点重合,视为不稳定的状态。具体原题的配图中说得很清楚,就不多说了。多边形的边数可能达到 50000 条。

思路应该是比较清晰的:首先求多边形的凸包,然后求多边形的重心;再枚举凸包上的每一条边,从重心向枚举的边作垂线;如果所作的垂线能够与边规范相交,那么这种情况是一种稳定情况。

思路确实很简单,但是写起来就有很多东西要写。比如凸包就是一个比较长的东西了,然后求重心又涉及到多边形的三角形分割啥的,还有垂线与边相交的判定也是有点麻烦的。

这道题我 WA 了一次,是因为我计算重心的时候,用的是凸包而不是原多边形。

本题源代码

数据生成器源代码

原创文章,转载请注明来源:http://euyuil.com/3186/acm-icpc-2010-hangzhou-rotational-painting/