安师大附中口胡题解-解题报告
i207M
2019-03-23 16:53:11
# 3.22
### T1
发现统计方案数需要知道与一个点相邻的比它大的点的数量。发现新的边其实就是a可以通过$<\min(a,b)$的点到达b,我们从小到大加点,线段树合并维护每个联通块的邻居数量。
### T2
建立前缀后缀的AC自动机,同时DP。复杂度$maxlen\times \sum len$
这道题有一个问题:如果在中间出现怎么办?发现这个串一定有回文后缀,那么,反串AC自动机的路径上就不会跳fail导致中断了。也就是说我们直接倒着跑一遍,check一下就可以了。
### T3
建立最短路树,在树上DP。中途需要求出不走父边到T的最短路e(v),用左偏树写。
![捕获.PNG](https://i.loli.net/2019/03/27/5c9b2d694f8b6.png)
# 3.23
### T1
考虑生成树的结构,对于第 i 列和第 i+1 列之间,要么连了一条边,要么连了两条边。将相邻的连了两条边的列视
作连通,则对于每个列的连通块,其中都存在恰好一列,上下两行有边。
于是我们可以把题目变成,将序列分段,每段的代价可以预处理,最小化代价即可。
### T2
讨论绝对值的式子的各种情况,发现最终答案的式子比较简单,再从另一个角度看式子,可以得到dp的思路,扫描线维护区间的贡献。线段树优化即可。
![捕获.PNG](https://i.loli.net/2019/03/25/5c9893bd3b856.png)
# 3.24
### T2
根据题意得到若干四元组,按顺序枚举一维,树状数组另一维
### T3
![捕获.PNG](https://i.loli.net/2019/03/25/5c98c9543098a.png)
分治+贪心的思想,建出“笛卡尔树”之后,就可以贪心了。对于第二问,因为决策是固定的,发现在状态里多记一维即可,合并是max卷积,预处理前缀和。
# 3.25
### T1
想到对$\sqrt{n}$分类讨论,但是不会分析复杂度...
![捕获.PNG](https://i.loli.net/2019/03/26/5c9a28e467600.png)
~~感觉很奇怪,这明明也是暴力,要遍历所有边,为啥就对咧?~~
还有另一种解释:设这个点度数为s,枚举所有度数比它大的点,这样总度数为$s^2$级别,所以不会超过$\sqrt{m}$
我明白了,首先,大小为k询问涉及的边数为$\min(m,k^2)$,所以如果我们只遍历有用的边,复杂度是有保证的。但是这样很难做,我们就遍历小的即可。
乱搞 -> 正解
### T2
每个数可以表示成$2^a3^bz$的形式,不同的z互不影响,我们可以把每个数看成$(a,b)$的点,这样问题就变成了给矩形染色,三个倒L形的格子不能同色,问方案数。如果直接在轮廓线存颜色,复杂度爆炸。
**但是有限制的计数可以容斥!** 我们枚举至少多少个三元环,这样我们轮廓线维护联通性即可。
### T3
题解的做法是离线分治差分什么的,没看懂。但是我们有在线做法!
我们树剖,每个点维护轻儿子的贡献和,这样,重链取反打标记即可,只有走一步轻链的时候会改变父亲的值,计算一下即可。感觉和动态Dp很像。
这道题的细节真的贼多...我调了好久...
代码:https://www.luogu.org/paste/v8fpww9t
大部分是一些细节问题,比如数组没赋初值,名称打错...但是重要的一步是:
我们要先遍历取反的链,在改变值之前,先把轻儿子的贡献去除!不然就无法正确计算贡献了。
# 3.26
~~发现可能可以不用口胡了~~
### T1
这道题有边权,这就很麻烦了,距离就不能存在状态里了,但是我们肯定是要预处理,对询问快速回答,怎么办?考虑产生距离的是$n^2$个点对,数量不大!我们可以在状态里记最远点。
### T2
对序列分块,建出凸包,在凸包上均摊的走。
### T3
![捕获.PNG](https://i.loli.net/2019/03/26/5c9a21141c211.png)
然后就变成序列上数颜色了,扫描线即可。
# 3.27
### T2
把每个点拆成log个点,都插进主席树里求前k大。为了卡空间,可以分成$[2^k,2^{k+1})$一个个做
# 3.28
今天的题十分套路
### T1
啊啊啊曾经有一瞬间想到要枚举答案的dis是多少然后瞬间又把它pass了......我们枚举dis,发现每一维是独立的,背包合并即可。
### T2
码农题,考场上必须写对拍。在纸上画一画,发现最关键的就是修改的那条链上的边,这是一个斜率优化的式子,我们要求出链上的凸包,于是可以离线树剖/线段树维护栈序凸包2个log做了。
### T3
min-max容斥,然后为了不枚举子集,我们可以在状态里记选的点的奇偶性,可选的路径数,然后$O(n^6)$暴力DP即可。这道题用FFT优化转移甚至更慢。
这道题为了加速,可以把不是0的状态存起来转移。容斥的-1的系数可以直接放在dp指中,不用单独记选择的个数。
# 3.29
~~凉了,还是得口胡~~
### T1
这道博弈论一眼看上去很神仙,各种复杂的策略...但是看完题解发现并不难。首先,我们可以通过DP确定每棵子树的状态:先手胜、红胜,蓝胜。然后可行的点的集合可以通过类似的思路转移。
# 3.30
### T1
枚举每个因数。10^18以内的因数个数是10^5级别的。
### T2
好吧。曾经有一瞬间想求出每循环位移1对答案产生的贡献,但是犯懒没有写,又开始了无端思考。发现把x从开头移到结尾,贡献是n-2x+1,于是求前缀和最小值即可。
### T3
想得差不多,但是细节肯定很多。我们把相同的一段缩起来,然后逐字符的确定,我们肯定是保留最多的当前字符,如果能都保留就过。不然就保留最长的k段,这时,最后一个保留的,后面的字典序会有影响,所以再求一下SA就好了。
# 3.31
### T1
平面图的边数比较少,然后...?
### T2
![捕获.PNG](https://i.loli.net/2019/04/01/5ca1da0e02c19.png)
### T3
枚举行的集合,然后列的集合,当选择了两列之后,每一列的单调性就确定了,为了保证复杂度,可以用桶转移。
# 4.1
### T1
奇环直接出解,偶环要么无解要么无用,最后变成一棵树,对一个位置计算一下上下界即可。
### T2
需要k-D Tree框出一个半平面,但是这样做的复杂度好象不对...
对于动态插入的半平面交,可以——二进制分组!
### T3
打表...?