Atcoder总结 Part III AGC3F Fraction of Fractal ARC93F Dark Horse AGC34F RNG and XOR
首先先判掉两个特殊情况
如果将两个原来的矩阵上下或左右拼在一起黑色的块都是联通的,那么最终图形中联通块的数量只有1个
如果将两个原来的矩阵上下或左右拼在一起黑色的块都不连通,那么最终图形中联通块的数量就是原来图形中黑色块数量$V^{k-1}$
那么现在的情况就是上下或左右中有一个是连起来成为一个联通块
其实这里并不需要用平面图上的欧拉定理,由于只有一个方向会产生新的边,并且原来的图只有一个联通块,那么只要数产生的新边$E$有多少个,那么答案就是$V^{k-1}-E$,这样就避免了难以统计的平面个数
考虑$E$如何得到,设原来的图中这个方向上的变有$a$个
那么$E_k=aV_{k-1}+E_{k-1}$
其中$V_k=V_1V_{k-1}$
直接矩阵快速幂即可
主要这道题需要把两个特殊情况判掉,否则会陷入恶心的平面个数的统计中去,像这种情况不太多的题目,不要一上手就试图用一个算法把所有情况都考虑进去,可以分开考虑,这样会更清晰一点
ARC93F Dark Horse
首先可以看出某个区间的获胜者,如果这个区间不存在$1$,这个区间的胜者是这个区间的最小值
那么可以把比赛的过程看作一棵树,那么最终根节点是要为$1$,考虑$1$的路径上每一次比赛的对手,每一个对手都不能是$A$中的数,从下往上依次标深度
如果直接算是不好算的,考虑容斥
设$S$为路径上对手为$A$中的深度的集合,设$f(S)$为$S$这个集合的方案数
答案就是$sumlimits_S (-1)^{S}f(S)$
考虑如何算出$f(S)$,由于$1$在每一个位置上都是等价的,那么只需要考虑某一个位置出发,可以设$dp[S]$表示哪些深度的路径已经有$A$中的数了,然后从大往小的去转移即可
AGC34F RNG and XOR
跟ZJOI2019开关几乎一样
首先设$dp[mask]$表示从当前数为$mask$期望要从$0$变化多少次
可以列出方程$dp[mask]=1+sumlimits_{i=0}^{2^n-1}p_idp[maskigoplus i]$,其中$p[i]$为产生第$i$种操作的概率
并且$dp[0]=0$
那么可以设$F$为$dp$的集合幂级数,$G$为$p$的集合幂级数,$H=sumlimits_S x^S$
那么$F=H+GF+cx^{emptyset}$
由于$dp[0]$是一个特殊的点,不满足上面的方程式,那么需要单独拿出来待定系数
设$overline{F}$为$F$的$FWT$的结果其他的同理
$[x^S]overline{F}(1-[x^S]overline{G})=[x^S]overline{H}+c$
其中
$[x^S]overline{H}=sumlimits_T(-1)^{|Scap T|}$
$=sumlimits_{i=0}^{|S|}(-1)^iinom{|S|}{i}2^{n-|S|}$
$=2^n[|S|=emptyset]$
可以发现如果$[x^{emptyset}]overline{G}=1$时当且仅当$S=emptyset$
那么$c+2^n=0,c=-2^n$
那么对于$S eq emptyset$
$[x^S]overline{F}=-frac{2^n}{(1-[x^S]overline{G})}$
就可以预处理$G$的$FWT$结果,来计算每一个$S eq emptyset$
那么主要是要求出$[x^{emptyset}]overline{F}$
由于$dp[0]$的值很特殊是一个已知的常数
那么考虑$IFWT$的结果
$0=[x^{emptyset}]F=frac{1}{2^n}sumlimits_S [x^S]overline{F}$
在右边的和式中提取出那么$[x^{emptyset}]overline{F}$这一项来
那么$[x^{emptyset}]overline{F}=-sumlimits_{S eq emptyset} [x^S]overline{F}$
那么求出$F$的$FWT$结果后就直接$IFWT$回去即可
对于开关那道题来说还需要再推几步
考虑答案就是$[x^S]F$
$[x^S]F=frac{1}{2^n}sumlimits_T(-1)^{|Scap T|}[x^T]overline{F}$
将$emptyset$的情况单独拿出$ans=sumlimits_T(1-(-1)^{|Scap T|})frac{2}{(1-[x^S]overline{G})}$
$ans=sumlimits_T[|Scap T|\%2=1]frac{2}{1+sumlimits_{iin T}p_i-sumlimits_{i otin T}p_i}$
$ans=sumlimits_T[|Scap T|\%2=1]frac{1}{sumlimits_{iin T}p_i}$
这个直接做一个0/1背包即可,顺便记录当前1个数的奇偶性