![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
凸包
文章平均质量分 78
neither_nor
这个作者很懒,什么都没留下…
展开
-
BZOJ4570 [Scoi2016]妖怪
每个妖怪在指定环境下攻击和防御的变化量比值是一个定值,所以我们可以把妖怪看成平面上的点,横纵坐标为攻击和防御,对于每个妖怪环境看成一条k=-b/a的过该妖怪直线,每个妖怪的战斗力就是x=0时y的值加上y=0时x的值 所以我们要维护一个右上凸壳,用一条直线卡这个凸壳,假设卡到的妖怪是(x,y),我们可以用x+y-kx-y/k更新答案 对于每个单独妖怪,战斗力=x+y-kx-y/k,对勾函数,当k原创 2016-05-11 08:10:09 · 2206 阅读 · 0 评论 -
BZOJ4585 [Apio2016]烟火表演
“这个凸包的形式,妙啊,他妙啊,妙啊” 王梦迪神犇在讲题的时候写的题解挺详细的 我们对每个点,有一个把子树内长度统一的花费关于统一成的长度的函数f(x),易知这个函数是下凸的,对于一个点x,设他的儿子是y,算x的函数的时候对所有的y,考虑x与y之间的边来更新f(y)得到F(f(y)),然后对所有F(f(y))相加就得到了f(x) 算F(f(x))的方法是找到f(x)的最低的一段,设这段是[L原创 2016-06-20 13:12:10 · 1806 阅读 · 2 评论 -
BZOJ3203 [Sdoi2013]保护出题人
对于每一次进攻,我们只要保证对于每一个僵尸,攻击力大于等于其生命值除以他开始受到攻击时与房子的距离即可,对这个式子进行化简,发现等价于攻击力大于等于他和排在他前边僵尸的生命值之和除以他开始时距房子的距离 把每个僵尸看作一个点,横坐标为初始距房子的距离,纵坐标为他和他前边僵尸的生命值之和,而他要求的攻击力就是这个点与原点连成直线的斜率 找到所有点中斜率最大值即可,可以维护一个上凸壳然后三分 注原创 2016-09-07 13:00:17 · 426 阅读 · 0 评论