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

多校第十六场 题解

时间:2020-07-30 19:45:12      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:答案   问题   max   计算   就是   不同   删除   线性   单调栈   

A. 小B的班级

莫名想到了一个结论,这种题可以找到选中的点形成的重心。
然后求所有点与重心距离的和即可。
原因是,任意一个子树大小均小于 \(m\),所以总可以构造出方案。
在这道题中,只要枚举最接近 \(1\) 号点的可能的重心,然后计算方案数就可以 \(O(n^3)\)

仔细想一下,可以把每个点到达重心的距离摊到每条边的贡献上。
直接套用上面得出的结论,可以知道贡献的系数就是 \(\min\{sz_a,sz_b\}\),然后随便写写这题就没了。
?

B. 小B的环

首先断环成链,把所有相邻并且相同的位置打个标记。
每次的操作就是要求覆盖环内所有标记,找出位置不同的两个点,然后做类似卷积的东西。
发现不会做,但是可以想一想暴力。
因为左右端点每次都是右移一位,每次的变化量并不大,所以只要考虑新加入的右端点的贡献。
写个类似链表的东西剪剪枝,\(O(n^2)\) 就过了。

正解是这样的,考虑一个环在删除一段后保留的,也是一段连续区间。
所以可以直接由该字符串,拆出若干段区间,对其中每一段区间考虑首尾不同的限制。
因为拆出的区间是不交的,可以线性去枚举每个能保留的长度。
考虑不合法的情况,一定是说整个字符串存在一个该长度+1大小的循环节。
所以用 \(KMP\) 求个 \(border\) 来判断是否存在循环节就完了。
?

C. 小B的农场

可以发现这样一个事情,总存在一个周长为 \(2\max\{w,h\}+2\) 的方案。
所以答案一定跨过 \(y=\frac{h}{2}\) 或者 \(x=\frac{w}{2}\)

两个问题是等价的,可以分别分治去求。
每次只要解决跨过 \(l,r\) 中点 \(mid\) 的答案。
所以要求的大概是 \(\min \limits_{i\leq mid,j > mid}\{ \min\{a_i,a_j\}+\min\{b_i,b_j\}+c_i+c_j \}\)
这是一个二维数点问题,只要对其中一维排序,用数据结构维护另一维即可。

还有一个单 \(\log\) 的做法,直接冲一个单调栈维护最值。
然后用线段树维护区间修改、全局最大值就好了。

多校第十六场 题解

标签:答案   问题   max   计算   就是   不同   删除   线性   单调栈   

原文地址:https://www.cnblogs.com/skyh/p/13405397.html

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