计数与期望简单做题笔记
teafrogsf
2019-01-11 20:40:08
专题写笔记比较适合。考试就不这么写了吧,大概。
这个写的可能比较简单~~,因为我全都不会做只能看网上题解~~
## 数论计数
### $[loj6202]$叶氏筛法(已填坑)
$f(i)=i$的$Min\_25$筛裸题。
只要筛质数。
### $[spoj34096]divcntk$(已填坑)
$f(i)=1$的$Min\_25$筛裸题。
当然似乎也可以定个值,不过无所谓,而且那样筛起来还挺麻烦,不如在求$S$的时候一并算来得方便。
### $[loj572]\rm Misaka\ Network$与求和(已填坑)
很有意思,需要理解$Min\_25$筛究竟是在干啥,才能方便地计算贡献。
~~用来复习莫比乌斯函数的性质题。~~
这里的$f$是原题的$f^k$。
$$\begin{aligned}&\sum_{i=1}^n\sum_{j=1}^nf'((i,j))^k\\&=\sum_{p=1}^n\sum_{i=1}^n\sum_{j=1}^nf'(p)^k[(i,j)==p]\\&=\sum_{p=1}^n\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{p}\rfloor}f'(p)^k[(i,j)==1]\\&=\sum_{p=1}^nf'(p)^k\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{d\vert (i,j)}\mu(d)\\&=\sum_{p=1}^nf(p)\sum_{d=1}^{\lfloor\frac{n}{p}\rfloor}\mu(d)\lfloor\frac{n}{dp}\rfloor^2\\&=\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\sum_{p\vert T}f(p)\mu(\lfloor\frac{T}{p}\rfloor)\\&=\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2(f\ast\mu)(T)\end{aligned}$$
前面那部分整除分块,问题主要是后面部分的快速计算。
虽然很容易想到杜教筛,但$f\ast\mu$的前缀和并不好算,因此我们需要改一下,让$f\ast\mu$变成杜教筛的$f$。
$$(f\ast\mu)\ast1=f\ast\epsilon=f$$
因此我们设$H(n)=\sum_{i=1}^n(f\ast\mu)(i)$,又因为杜教筛里的$g$是$1$函数,那么
$$H(n)=F(n)-\sum_{i=2}^nH(\lfloor\frac{n}{i}\rfloor)$$
因此$H$我们可以用杜教筛求到,那么问题转化为快速计算$F(n)=\sum_{i=1}^nf(i)$。
这个东西涉及到了质因子,因此非常适合用$Min\_25$筛计算,因为它求$S$的部分就是在枚举质因子,因此我们算当前递归位置的答案$S(n,j)$的时候,那个次大质因子是可以知道的。
首先质数的$f(x)=1$,所以求$g$就是求质数个数。
我们考虑$Min\_25$筛求合数部分的式子:
$$S(n,j)=g(n,\vert P\vert)-g(P_j-1,j-1)/\sum_{i=1}^{j-1}f(P_i)+\sum_{i=j}^{P_i^2\le n}\sum_{k=1}^{P_i^{k+1}\le n}(F(P_i^k)S(\frac{n}{P_i^k},i+1)+F(P_i^{k+1}))$$
可以注意到,虽然这里枚举的是一坨数,但实际上我们求$S$是一个递归的过程,而实际上我们运用积性函数的性质去递归的时候,在当前递归之前我们已经乘了一坨数,也就是其实质数也并不是质数,而且并不是只有一个质因子的数(这点可以观察它的过程),那么它们都是有贡献的,而且贡献就是$P_{j-1}$。
于是我们只需要在筛的过程中,把贡献乘上去就可以了。注意$F(P_i^k)S(\frac{n}{P_i^k},i+1)$这一块不用加贡献,因为这个贡献在之后加。之后那个因为质因子个数$\ge2$,因此贡献是$P_i$。
虽然我觉得这玩意儿复杂度很不靠谱,但$loj$的题解说是$O(n^{1-\omega})$的,那就是吧。
似乎因为一直是整除分块的运算,$g$可以直接预处理。
### $[Simulation1.25]easymath$(已填坑)
$\rm orz\ Gromah.$
题意:求
$$\sum_{i=1}^n\mu(in),n\le 10^9$$
## 容斥原理与状态压缩
### $[bzoj4671]$异或图
考虑正着的“连通”这个条件不知道怎么计数,不如跟一般连通图计数一样用容斥解决问题。因为每个点是不同的,所以我们用斯特林数来枚举划分。
考虑划分的每一个集合内部连边任意,但是不同集合之间一定没有边。
令$f_i$表示一个图至少有$i$个连通块时的容斥系数,考虑对于一个有$m$个连通块的图,它的容斥系数关系式是:
$$\sum_{i=1}^m\begin{Bmatrix}m\\i\end{Bmatrix}f_i=[m==1]$$
斯特林反演一下可以得出
$$\sum_{i=1}^m(-1)^{m-i}\begin{bmatrix}m\\i\end{bmatrix}[i==1]=f_m$$
$$f_m=(-1)^{m-1}\begin{bmatrix}m\\1\end{bmatrix}=(-1)^{m-1}(m-1)!$$
最后一步的转换似乎是环排列数。
然后现在问题就是,在$s$个边集中,有多少种方案使得各个划分之间连边的异或和为$0$。
我们把每条边(为了方便把划分间的任意点对都算作边)当作向量中的一维,然后把每个边集对应的向量插到线性基里,那么由于线性基内部元素是线性无关的,那么自由元显然都能通过与线性基内元素异或成$0$向量。也就是说假设线性基内元素为$x$,总向量个数为$y$,那么选择的方案数就是$2^{y-x}$。
这个算法的时间复杂度大概是$O(Bell(n)(n^2+s\log^2s))$,大概也就是$O(pass)$吧。
### $[ARC093F]Dark\ Horse$
丢人,一点思路都没有。
首先你要发现放在哪个位置其实是无所谓的,因为你可以把比赛过程看成一棵满二叉树(这个$yy$一下就知道了),那么每个结点的两个儿子转一下是不影响答案的。
那么我们钦定编号为$1$的人在一号位置,最后只要$\times 2^n$就可以了。
然后因为直接算“不在”不好算,容斥一下可以变成求当前某些区间$(\in[2],[3,4],[5,8],\cdots)$的最小值都是那$m$个数中的一些的方案数,这个可以用个$dp[i][S]$去算,表示填到第$i$个最小值,之前填了最小值区间的状态为$S$,从大到小填数就可以了。
至于怎么填,首先这个数可以不作为最小值放在之后的里面配,如果作为最小值填到一个新区间里,那我们可以将当前还没配(就是上次填的数中剩下的和这次填的中本来就有的)的数统计一下,然后每次枚举一个新区间放最小数的时候,可以用排列算一下方案,就做完了。
### $[ZJOI2016]$小星星(已填坑)
一道小清新容斥题。
因为不能重复,考虑一个$O(n^33^n)$的$dp[u][i][S]$表示$u$号点映射$i$号点在图上映射点集为$S$。这个转移就很显然,也显然会$T$。
考虑我们$O(n^3)$的$DP$如果映射出现重复,那么意味着映射的点集大小不是$n$。
那么我们考虑按点集容斥,枚举点集$S$表示映射的点集强制**至多**为$S$,做一遍树形$DP$,容斥系数就是$(-1)^{\vert S\vert}$?
### $[bzoj3622]$已经没有什么好害怕的了
对自己的$DP$不够自信啊$\cdots\cdots$
首先$\ge k$的显然比$=k$好算,因为满足了$=k$之后可以任意排。
然后这个用一个$dp[i][j]$表示前$i$个数中选出来$j$个满足$>$对应$b_i$这个条件的数的方案数。
转移很显然,就枚举当前数选不选就可以了。注意预处理每个数比几个数大。
$dp[n][i](n-i)!$就是$\ge i$的方案数,之后我们考虑怎么容斥。
对于每个$=j$的方案,它在$\ge i$的方案中被算了$\binom{j}{i}$次,因为你可以任选$i$个数;于是我们设$f[i]$表示$=i$个的方案数,则
$$f[i]=dp[n][i]-\sum_{j=i+1}^n\binom{j}{i}f[j]$$
### $[Simulation1.20]tree$(已填坑)
题意:给定一棵树,每条边有权值$val_i$,有$q$个修改,每个修改改一条边的权值。$val_i\le 10^6,q\le 100,n\le 10^5$。
在每次修改后及全部修改前,求树上满足路径$gcd=1$的点对数。
这题的$idea$就是,发现偏序集容斥之后,就直接上莫比乌斯反演。
考虑求$f(k)=gcd==k$不太方便,可以求$g(k)=gcd\vert k$的方案数。
$$f(n)=\sum_{n\vert d}\mu(d)g(\frac{d}{n})$$
因为要求$f(1)$,因此$n=1$,$f(n)=\sum_{d=1}^n\mu(d)g(d)$。
考虑$g$怎么求,对于没有修改的情况,我们直接对每个$\mu(d)$有值的$d$,把所有权值是它倍数的边提出来,直接用可撤销并查集去维护答案(显然只有连通才能保证$gcd$)。每条边只会进入$2^c$个$d$,其中$c$指的是不同质因子个数,$val_i\le 10^6$时最大是$7$。
如果有修改,我们一开始先不把被修改的边放进并查集,对于每一个$d$我们先枚举时间,再枚举**有效修改**(否则每个修改不止$2^c$次出现,复杂度就错了),把这些修改放进去算当前时间的答案。注意每个时间最后都要**全盘撤销,因为有些边在不同时间的权值不同**。
时间复杂度应该是$O(\frac{n\sqrt n}{\ln\sqrt n}+(n+q^2)2^c\log n)$,实现细节比较多,否则会假。
### $[PKUWC2018]$猎人杀
~~说到$\sout{PKUWC}$,我就想起了斗地主,今年年初,九条可怜的地主斗即将~~
首先这题比较难考虑的是因为每次死的人都不同,因此分母不同不好计算期望。
因此~~不~~可以想到,我们给每个死去的猎人打一个标记,然后如果$rand$到死了的猎人那就再随一次,显然这样与原问题等价。
然而还是不好安排第一个人在最后一个。
考虑容斥~~我不知道为什么会想到容斥~~,我们枚举集合$S$表示**至少**$S$这个集合会在$1$后面死,$W,w_1,all$分别表示$S,1,$全部猎人的权值和,那么$1$最后死的期望就是
$$\sum_{S}(-1)^{\vert S\vert}\sum_{i=0}^\infty (1-\frac{w_1+W}{all})^i\frac{w_1}{all}$$
先把无限和式收敛一下
$$\sum_{S}(-1)^{\vert S\vert}\frac{1}{1-(1-\frac{w_1+W}{all})}\times\frac{w_1}{all}$$
$$=\sum_{S}(-1)^{\vert S\vert}\frac{w_1}{w_1+W}$$
这个式子直接算显然是不好做的,但是我们可以发现因为$W=\sum_{i\in S}w_i$,那么对于每个$W$,它的系数应该是
$$\prod_{i=1}^n(1-x^{w_i})$$
的$x^W$那一项的系数。这个东西类似于背包,可以进行分治$FFT$。
### $[2.24\mathrm{simu}]tree$
## $DP$计数
### $[AGC002F]Leftmost\ Ball$
这题真的不难,但我网上题解真的看不懂。知道结论了我还是不会做。
首先我们可以发现一个结论就是如果从左到右那么$0$球数量一定不少于颜色数量。
有了这个我们就很好$DP$了,设$dp[i][j]$表示用了$i$个零球$j$种颜色,然后每次要么加一个$0$球,要么加一个颜色,加颜色的话可以用组合数计算一下。表示在接下来的空位中我们怎么选。空位是相互独立的所以这里选啥不影响之后的空位整体还是那么多。
组合数大概是$\binom{n-i+(n-(j-1))(k-1)-1}{k-2}$,注意这里必须要放一个当前颜色的球因此只能选$k-2$个。还要注意我们要选颜色,当然也可以在最后乘阶乘。
### $[AGC013E]Placing\ Squares$
不太懂网上为啥要把题面转成$\rm WerKeyTom$那种形式。原题面不是挺好的么$\cdots\cdots$
这道题运用了**平方处理**这个很重要的技巧,但我忘了。所以也没办法。
首先这个贡献看起来很简单,但我们发现如果我们要进行与边长相关的$DP$,复杂度会达到$O(n^2)$级别,谁都救不了。
于是我们考虑在正确计算贡献的情况下转换模型。
考虑一个长度为$n$的区间,我们可以在每两个数之间任意放隔板,但是在那些限制的位置不能放。然后每个被隔板分开的区间(包括首尾)我们都要放也只能放两个**不同**的球,并且每个位置允许放两个球。求这样的方案数。
观察到这个模型是等价的,因为每种划分的贡献是会被算$\prod len_i^2$的,显然在这个模型中每个区间也是独立的,因此我们转化成了一个非常方便$DP$的模型。
设$dp[i][j=0,1,2]$表示当前枚举到第$i$个位置,当前区间放了$j$个球的方案数。
如果$i-1\to i$放隔板,那么上一个区间只有$j=2$才合法,因此无论第$i$个位置放几个球,都只能从$dp[i-1][2]$转移;
如果不放,那么$dp[i][j]$就可以从$dp[i-1][k](k\le j)$的地方转移,其中注意的是$dp[i-1][0]\to dp[i][1]$**要**$\times 2$,因为我们要确保两个球是不同的,并且都可以选。
然后这个做法就是$O(n)$的。显然这个东西可以用矩阵加速转移,但因为有限制不能放隔板的地方,因此我们要在每个限制那里暴力转移一次,然后接着矩阵快速幂。
### $[NOI2009]$管道取珠
**平方处理**还有另外一种转化方式,就是统计有序对。
对于这道题,我们就是要统计有多少对$(way_a,way_b)$能够得到相同的结果,因为对于每种结果考虑方案数显然非常不方便。
~~然后我就连普及组$\sout{DP}$都不会了。~~考虑$dp[i][j][k][l]$表示$a$选$i$黑$j$白,$b$选$k$黑$l$白,每次只转移方案相同的。注意到$l$没有什么意义,直接去掉就是$O(n^3)$的了。
### $[hdu5181]numbers$
这个题告诉我们推了个性质不能膨胀,你还要接着推下一个。
我琢磨了一下出栈序列,发现一个序列非法当且仅当$x<y<z$这三个数满足顺序是$z,x,y$这样的,因为如果$z$出栈了$x$没出栈$y$必然在$x$上面。
推完了之后我发现可以设$dp[i][j][k]$表示第$i$个数是$j$且前面的最大数是$k$时的方案数,尽管可以通过前缀和达到$O(n^3)$,然而并不能处理限制的问题。
然后实际上之前那个性质可以推成下面这个性质,就是考虑按时间把每个数的进出栈序列弄出来,这玩意儿就是个合法的括号序列,因为我们发现是不可能出现交叉(就是譬如$x<y$,$x$入,$y$入,$x$出这样的),也就是说,我们可以构建一棵树,并且这棵树的每个结点$u$的儿子范围是一个形如$[u,u+x]$的连续区间。
那么我们可以设$dp[u][i]$表示$u$号结点子树大小为$i$的方案数,有一个很显然的转移就是$dp[u][i]=\sum_{k=1}^{i-1} dp[u][k]\times dp[u+k][i-k]$,然后倒着$DP$就可以了。
至于限制实际上就是限制了你的子树大小,那我们在$DP$完一个不合法状态后直接把它设为$0$就可以了。初始值就是$dp[u][1]=1$。
为了方便我们加上一个根$0$,答案就是$dp[0][n+1]$。
### $[THUWC2017]$随机二分图
这题好像送了$40pts$啊$\cdots\cdots$而且我觉得这个正解根本没有提示,$t=0$的状压$DP$可以做到$O(nm2^n)=O(n^32^n)$(而且实际上状态只能选位数$\le$当前枚举点的,根本跑不满),正解这个是$O(\binom{n}{i}^2m)$的(虽然也跑不满)。
考虑$dp[n][S]$这个状压不方便解决多条边的问题,我们要换一种更方便的,就是$dp[S][T]$表示左边$S$匹配右边$T$的期望。
考虑我们后面两个条件具体增加了什么限制。首先我们正常加边,如果只有一条匹配边那概率就不变,如果$t=1$两条都匹配,概率就少了$\frac14$,如果$t=2$就多了$\frac14$($\frac12\times\frac12=\frac14$),于是我们把两条边再额外捆绑成有四个点的一条边,概率为$\pm\frac14$就可以了。
实现可以从终态记搜,当然也可以直接用个$\mathrm{map}DP$,只选取能匹配的状态的话效率比较优秀。
### $[CF889E]Mod\ Mod\ Mod$
这题第三个方程没看懂,先咕咕咕。
### $[HNOI2015]$亚瑟王
这个题自己想到了不能按回合$DP$不然就只能状压。
然后就不会做了。
现在没完全理解,咕咕咕。
### $[fakesky2.17\mathrm{simu}]$寒妖王$(mstking)$
## 条件意义
就是没用什么方法又是计数题的题,通常是很需要分析题目性质的题。
### $[ACF2017qualB\ E]Popping\ Balls$
我一开始看错题以为是首尾都能放,然后一想这个$s,t$毫无意义$\cdots\cdots$
考虑这个$t$其实可以在一段红球之后再决定,假设我们**剩下**$x$个红球,直接将$t=x+1$可以获得最优答案,并且显然$t>x+1$的决策不如等于时优。
那么我们可以预见最终序列的样子:
$$x+(1+b-1)+y+(1+b-2-\alpha)+o$$
这个式子看起来非常莫名其妙,不过其实也不太难解释:
首先,由于上面的那个结论,我们一开始先取$x$个红球,然后取$1$个蓝球。现在我们剩下$a-x$**个红球,**$b-1$**个蓝球**。$x$的取值范围是$[0,a]$,因此$t$的范围是$[1,a+1]$,其中当$x=0$ 时$t$是$a+1$,依此类推。
接下来你可以发现,无论我们怎么取,当取了$b-1$个球后,$t$就再也没有【哔——】用了,于是我们取$b-1$个球,并且在这$b-1$个球中,我们可以枚举$\alpha$个数表示取$\alpha$个蓝球,$\alpha\in[\max(b-1-(a-x),0),b-1]$。现在我们剩下$a-x-(b-1-\alpha)$**个红球,**$b-1-\alpha$**个蓝球**。
然后我们还可以有个$s$,我们仍然可以在选完一段红球后再来确定$s$。我们假设取了$y$个红球,再取$1$个蓝球。现在我们剩下$a-x-(b-1-\alpha)-y$**个红球,**$b-2-\alpha$**个蓝球**。
那么我们还可以取$b-2-\alpha$个球,$s$也会失效,剩下的取球路线唯一。我们可以枚举$\beta$个数表示$\beta$个蓝球,$\beta\in[\max(b-2-\alpha-(a-x-(b-1-\alpha)-y),0),b-2-\alpha]$。现在我们剩下$a-x-(b-1-\alpha)-y-(b-2-\alpha-\beta)$**个红球,**$b-2-\alpha-\beta$**个蓝球**。~~因为化简没什么意义就不化简了。~~
那么我们枚举$x$,枚举$\alpha$,枚举$y$,枚举$\beta$,关于放球的计数可以把一种球当隔板用隔板法计算,就可以得到一个$O(n^4)$的做法了。
首先我们发现$\alpha$是非常好优化掉的,可以直接累和,然后根据$x$去掉不合法的状况。
### $[CF960G]Bandit\ Blues$
很奇怪的一道强行上斯特林数题。
首先我们可以猜到一个结论:最大数一定会把两边分隔开,于是最大数左边必须要有$a-1$个前缀$\max$,右边必须要有$b-1$个后缀$\max$。
于是我们可以把$n-1$个数分为$a+b-2$组,以每个$\max$的右边(后缀就是左边)到下一个$\max$位置为止分为一组。显然可以发现,只要你能填出这样一个排列,组内可以乱填,假设某组有$x$个数,那么就有$(x-1)!$种填法。
不难发现这是环排列数,也就是$\tiny\begin{bmatrix}x\\1\end{bmatrix}$。
那么考虑组合意义,相当于我们要把$n-1$个数放到$a+b-2$个环里去,也就是$\tiny\begin{bmatrix}n-1\\a+b-2\end{bmatrix}$。注意到还需要把所有环划分到两边,但环是有大小顺序的,因此乘一个组合数$\binom{a+b-2}{a-1}$。
然后需要$O(n\log n)$预处理第一类斯特林数,去看肖大佬博客或者[这个](https://www.luogu.org/blog/teafrogsf/Mathematics)。
### $[HNOI/AHOI2017]$抛硬币
连这$SB$题都不会做了$\cdots\cdots$
正向计数不好利用$b-a\le 10000$的性质,考虑反向计数。~~$\sout{Candy}$给出了一个正向计数的解法,好强啊~~
就是首先$a=b$时,我们发现不合法的方案数就是除了平局以外的所有情况的一半,因为反色后就是另一个人赢;$a>b$时因为$A$数量多了,那么有时候对于一种小$A$赢的情况,将其反色后还是小$A$赢。我们设小$B$抛了$i$个正面朝上的,$A$比$B$多$j$个,那么就要满足$a-i-j>b-i$,即$j<a-b$,就可以有
$$ans=\sum_{i=1}^a\sum_{j=1}^{a-b-1}\binom bi\binom a{i+j}=\sum_{i=1}^a\sum_{j=1}^{a-b-1}\binom b{b-i}\binom a{i+j}$$
我们考虑它的组合意义,就等同于我们在$a+b$个硬币中取$b+j$个朝上的,然后把前面$b$个中间被选了的给$B$,剩下的给$A$(因为组合数没有顺序),可以发现这样就能考虑所有的$i$的情况。那么就可以变成
$$ans=\sum_{i=1}^{a-b-1}\binom{a+b}{b+j}$$
这个东西叫做范德蒙德卷积,是一个还算不错的组合数套路。
然后就可以直接算了,注意对$2$的次幂特殊考虑,因为它没有逆元,要在上面除掉。卡常的问题去看别人的博客吧。
### $[HNOI/AHOI2018]$寻宝游戏
这题好神啊,思维太妙了。
首先我认为这题的结论要发现,应该只能用10分暴力打表,发现有贡献的位运算序列是连续的。
然后来讲讲做法吧。就是如果你把操作序列的$\&$看成$1$,$\vert$看成$0$,就可以得出一个船新的$01$序列。那么对任意一列我们把这一列的序列扣出来,发现如果结尾要是$1$,那么最后一个$\vert 1$要在最后一个$\&0$后面。也就是说我们把最后一位看成最高位,那么操作序列形成的二进制数一定要**小于**这一列的二进制数。那么我们把每一列这个数抠出来排序,找到分界点就可以了,答案就是分界点两个数的差。
至于实现,我参考了$Navi\_Awson$打野的,好强啊。
## 考虑贡献
### $[AGC005F]Many\ Easy\sout{Hard}\ Problems$
这种题一看题解就懂,自己又不会做。好菜啊。
首先,虽然考虑一个点的贡献是正常的想法,但那样多了一点细节,我们不妨考虑一条边的贡献。显然一个连通块大小$=$边数$+1$,而$+1$也就是在每个$k$最后加一个$\binom{n}{k}$就可以了。
考虑每条边把一棵树分成了大小为$x,n-x$的两个部分,那么它产生的贡献就是$\binom{n}{k}-\binom{x}{k}-\binom{n-x}{k}$。
这样只能$O(n^2)$做,可以考虑记一下每个$x$的出现次数$cnt_i$,这个$x$显然就是子树大小。注意每棵子树的$n-x$也算作子树大小,也加到$cnt$里。
为了方便,设$cnt_n=-(n-1)$。因为统计的是边的贡献,不存在子树大小$=n$的情况,而显然$\binom{n}{k}$会出现$n-1$次。
然后问题转化为了对每个$k$,求
$$\begin{aligned}ans_k&=\sum_{i=k}^n-cnt_i\binom{n}{i}\\&=-n!\sum_{(n-i)=0}^{n-k}\frac{cnt_i}{i!(n-i)!}\\&=-n!\sum_{i=0}^{n-k}\frac1{i!}\times\frac{cnt_{n-i}}{(n-i)!}\end{aligned}$$
直接卷就完事儿了。记得求和上界是$n-k$因此要最后要把卷完的序列反过来。
### $[PKUWC2019]$你和虚树的故事
这题想了半天一点想法都没有,结果是我看错题面了$\cdots\cdots$
后来想了一个奇怪做法,不知道是不是真的反正很麻烦,还是来讲讲标算吧。
其实有一个很妙的做法,就是用到点数$-$边数$=1$这个$trick$,可以直接算出每种集合大小对应的贡献和,套个组合数之后,可以$NTT$加速计算。
## 高斯消元
### $[BJOI2018]$治疗之雨
其实是道傻题,只是我比它更傻。
考虑直接设$dp[i]$表示剩余生命值为$i$时期望几回合死亡。
$$dp[i]=1+\frac1{m+1}\sum_{j=0}^{\min(i+1,k)}p(j)dp[i+1-j]+\frac m{m+1}\sum_{j=0}^{\min(i,k)}p(j)dp[i-j]$$
$$dp[0]=0,dp[n]=1+\sum_{j=0}^{\min(n,k)}p(n,j)dp[n-j]$$
$$p(j)=\frac{\binom kjm^{k-j}}{(m+1)^k}$$
其中$p(j)$表示$k$个反甲~~不管了就这么叫吧~~给自己扣了$j$血的概率。注意$0^0=1$。
然后显然可以直接高消。但注意到这个矩阵与下三角非常像,只要倒着消,每次用$i+1$行把$i$行的第$i+1$个数消掉,就变成下三角了。然后直接正着回代即可。
这个题特判非常恶心,有很多情况。
## 群论
### $[spoj422]transsp2$
这个东西既然是$2^x$,那么我们考虑把坐标用二进制表示再拼接起来,那么换位实质上就是把这个二进制数左移动$a$位,这个东西举个例子:$a=2,b=3,(2,7)\to10111\to(7,2)\to11110$,感性理解一下。
把对应的二进制数间连边,答案变为$2^{a+b}-$环的个数。问题又可以等价变形为,有一个长度为$a+b$的环,在环上黑白染色,如果一个环能通过左移$a$位得到另一个环那么称这两个环等价,求环染色方案数。
首先这个置换的循环节大小是$n=\frac{a+b}{(a+b,a)}$循环节个数是$g=(a+b,a)$,但这个不能直接上$Polya$。于是我们把连续的$g$位捆在一起(显然这$g$个数分别位于不同的循环节),然后上$Polya:$
$$ans=\frac1n\sum_{i=1}^n2^{g^{(i,n)}}$$
这个玩意儿可以直接上$\mu$,这里不写了,反正化完了就是个$\varphi$。