码迷,mamicode.com
首页 > 其他好文 > 详细

6674. 【2020.05.30省选模拟】凸包的价值

时间:2020-06-03 20:03:31      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:没有   要求   价值   main   写代码   比赛   nio   https   tps   

题目

平面上有若干个点,选出个点集,要求这个点集是一个凸包(凸包上没有三点共线)。
这个点集的价值为\(xa^{x}b^{y}c^{z}\),其中\(x\)为凸包的顶点数,\(y\)为凸包内或凸包边界上的点数,\(z\)为不在凸包内的点数。
题目保证\(b=a+c\)
求所有满足条件的点集的价值和。
\(n\leq 2000\)


正解

比赛看到后直接认为这是个毒瘤题,所以没有思考。

看到\(b=a+c\)这个奇妙的东西,应该去想想这个价值的组合意义是什么。
\(xa^xb^yc^z=x\sum_{i=0}^ya^{x+i}c^{z+y-i}=x\sum_{i=0}^ya^{x+i}c^{n-x-i}\)
大力思考一下,这个东西等价于什么呢?
是个正常人都想不到这个相当于选一个点集,这个点集中每个点的贡献为\(a\),不在点集内的点的贡献为\(c\),然后贡献乘上这个点集作出的凸包的边数。
更加形象:一个点有\(b\)种状态,其中\(a\)种状态为\(1\)\(c\)种状态为\(0\),贡献为所有选\(1\)的点作出的凸包的边数和。

既然贡献为边数和,那么可以考虑分别计算每条边的贡献。
对于一条边,如果它在凸包上,那么它的一边全部选\(0\),另一边至少选一个\(1\)
对边进行极角排序,维护一下它左手向和右手向的点分别有多少个,然后计算。
注意仔细考虑一下三点共线的情况。


总结

这题没有写代码……

在看到奇怪的式子时,总是要去想想它的组合意义,然后套一些可以恰好计算那么多次的算法。

6674. 【2020.05.30省选模拟】凸包的价值

标签:没有   要求   价值   main   写代码   比赛   nio   https   tps   

原文地址:https://www.cnblogs.com/jz-597/p/13039743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!