「总结」杂题选讲

Bitwise Xor
我们可以发现一个序列中的最小的异或值是两个大小相邻的数的(xor)(min)
那么我们对序列排序。
只需要计算相邻的(xor)是大于等于(k)的方案。
(dp[i])是以(i)结尾最小(xor)大于(K)的方案。
然后我们可以类似于用树状数组来搞最长升降转移。
这次用(trie)来转移。

MOD Problem
大水题

[egin{aligned} ans&=sumlimits_{i=1}^{n}n mod I\ &=sumlimits_{i=1}^{n}n-ilfloorfrac{n}{i} floor\ &=n^2-sumlimits_{i=1}^{n}isumlimits_{j|i}^{n}I\ &=n^2-sumlimits_{j=1}^{n}sumlimits_{i|j}i\ &=n^2-sumlimits_{j=1}^{n}sigma(i)\ end{aligned} ]

然后线筛。

平方串
(dy)讲过的原题。
貌似是。。
还是用插点法,枚举长度(len),每(len)个插一个点。
发现每次两个串必然是越过两个插入的点的。
然后就找两个点的(lcp)(lcs)就可以了。
这样能够确定经过相邻两个特殊点的平方串左右端点的范围。
然后用类似(hash)的方法来统计答案就行了。

Conjugate
联赛原题吧。
分别考虑每一堆和第一堆做贡献。
使得某一堆在第一堆之前做贡献,可以发现此时其他堆是无效的。
那么最终的答案就是:

[ans=1+sumlimits_{i=2}^{n}frac{a_i}{a_1+a_i} ]

湖人
感觉还是原题。
想不起来是哪里看到的了。
非别考虑每一个点自己终结自己的期望。
那么答案是:

[ans=sumlimits_{i=1}^{n}frac{1}{d(i)} ]

可以用一个(min\_25)筛来做。
虽然我还没想懂怎么做。

Game with Marbles
先求出摸到一个蓝球之前摸到绿球的期望个数。
如果摸到了红的可以扔掉重新膜,所以认为红球其实是不存在的。
那么有:

[E=frac{G}{B+G}(E+1) ]

所以:

[E=frac{G}{B} ]

一个蓝球对应这么多绿球,那总共的绿球就是(frac{KG}{B})个咯。
对红再单独计算。
可以计算每一个红球。如果这个球没,没有被摸到,概率就是(frac{B}{B+1})
所以一个球的贡献就是(1-left(frac{B}{B+1} ight)^K)

游戏
这个就是贝叶斯公式了。
我们把每一个点左右两端确定的情况作为这个点期望的取决标准。
用线段树和两个矩阵来维护这些区间。
每个点的矩阵维护贝叶斯公式划出的分母和。

AGC035D
发现其实是消除掉一个数给两边加上。
那么每一个权值都要乘一个系数上去。
做个区间(dp)
(dp[l][r][x][y])表示做右端点的系数为(x,y),区间([l+1,r-1])已经被消除的最小答案。
枚举中间点合并区间。

[dp[l][r][x][y]=minlimits_{mid=l}^{r}dp[l][mid][x][x+y]+dp[mid][r][x+y][y]-(x+y)A_{mid} ]

operation
联赛原题。
由于除以二的操作并不会进行很多次。
所以我们可以直接按度数轻重点划分。

概率论
听过的,写在某个生成函数里面了。
https://www.cnblogs.com/Lrefrain/p/12274363.html
这篇的最后一个。

Jiry Matchings
经典的方法
如何用(FFT)快速求出重链划分情况下的所有贡献。
其实就是从叶子对所有轻儿子分治(FFT),然后再从一条重链上分治(FFT),把一条重链的贡献分治(FFT)出来。
这个时候链顶成为别人的轻儿子,再对这个操作递归即可。

小星星
做过的题。
https://www.cnblogs.com/Lrefrain/p/11644600.html
子集反演嘛。

Ribbons on Tree
考虑容斥。
我们如果去掉一些边集,就相当于一个连通块划分,同时从连通块中选择一个代表点的方案。
这是(prufer)序列的结论,详情见数树那个题
这个东西如果用题解写的方法就太麻烦了。
我们可以直接把第二维度压掉
直接设(dp[x][0/1])表示第(x)的点的子树中(x)所在连通块是否存在代表点的方案数。

原文地址:https://www.cnblogs.com/Lrefrain/p/12656405.html