「考试」省选26

T1
dp+多项式。(喜欢的类型)
\(dp[i][j]\)已经插入了\(i\)个区间,当前的序列长度为\(j\)的方案。
目标:\(dp[m][n]\)
初始化:\(dp[0][0]=1\)
转移:

\[dp[i][j]= \begin{cases} dp[i-1][j]+\sum\limits_{k=0}^{j-1}dp[i-1][k](k+1)&i\not =m\\ \sum\limits_{k=0}^{j-1}dp[i-1][k](k+1)&i=m\\ \end{cases} \]

直接考虑对于\(dp[m][n]\)来说\(dp[0][0]\)的贡献。
设经过的序列长度为\(i\)
\(A_1+1,A_2+1,A_3+1....A_i+1\)
贡献就是这个序列的乘积乘上\(\binom{m-1}{i-1}\)
就是考虑爆搜的过程中哪一步走\(dp[i-1][j]\)的转移贡献。
已经限定最后一次也就是第\(m\)次,它必然是第二种转移,所以组合数是\(m-1\)\(i-1\)
这样的话非序列部分贡献确定了。
求序列部分的贡献。

\[\prod\limits_{i=1}^{n-1}((i+1)x^1+1x^0) \]

可以变换为:

\[\prod\limits_{i=1}^{n-1}(x^1+(i+1)x^0) \]

\[F_{n-1}(x)=\prod\limits_{i=1}^{n-1}(x+i+1) \]

\[n=2^w,log n \]

\[F_{n}(x)\rightarrow F_{2n}(x) \]

\[F_{2n}(x)=F_{n}(x)F_{n}(x+n) \]

\[F_{n}(x)=\sum\limits_{i=0}^{n}a_ix^i \]

\[\begin{aligned} F_{n}(x+n)&=\sum\limits_{i=0}^{n}a_i(x+n)^i\\ &=\sum\limits_{i=0}^{n}a_i\sum\limits_{j=0}^{i}\binom{i}{j}x^jn^{i-j}\\ \end{aligned}\]

卷积两次即可求出\(F_{n-1}(x)\)

\[ans=\sum\limits_{i}\binom{m-1}{i-1}[x^{n-i}]F_{n-1}(x) \]

T2
数据结构
其实关于很具体的证明不是很简单。
但是可以说一下大概的思路。
\(low(x)\)\(x\)\(K\)进制下最低位是谁(那一位是第多少位),\(lowbit(x)\)位最低位上的数。
然后关于\(k\)的讨论其实并不只限于奇偶。
\(k=(2x+1)2^p\)
也就是说提出其中的所有2的因子。
\(y=(2x+1)2^q\)
这个时候的\(y\)有两种情况。

\[low(y+lowbit(y))= \begin{cases} low(y)&q\geq p\\ low(y)+1&q<p\\ \end{cases} \]

其中第一种情况必然是一条链。
因为其后继只有一个,原因是2关于\(2x+1\)必然存在逆元,后面的部分已经不互质了所以没必要管,而需要管的仅仅是前面的(2x+1),这样是存在逆元的。
关于第二种情况,这种情况最多跳\(log_kn\)次因为一直在进位,而且每次进位最多跳\(p\)下然后再次进位。
所以跳的次数最多不超过\(plog_kn\)
等到不进位的时候就到了链上,我们可以用数据结构维护一波。
然后还得维护一下在链上进位的次数。
这个很好算,因为每次都加的是\(K^{low(x)}\)那么多。
所以次数就是:\(\frac{n}{K^{low(x)}}\)
这样根据这个次数和\(lowbit(x)\)可以唯一的确定出一个链头。
我们链上倍增一下就可以找到链头了。
这样子就知道该在哪个线段树里面操作了。
然后暴力怎么维护就怎么维护就可以了,用动态开点比较好。

T3
\(burnside\)
枚举循环节长度:
\(len\)个长度为\(\frac{n}{len}\)的序列构成了长度为\(n\)环.
\(dp[n][m]\)长度为\(n\)的环满足\(m\)个染色的合法方案。

\[ans=\frac{1}{|G|=n}\sum\limits_{len|(n,m)}dp[\frac{n}{len}][\frac{m}{len}]\varphi(len) \]

然后考虑求\(dp[n][m]\)
我们考虑容斥插板。
当前长度为\(n\)的环中\(m\)个被染成了金色。
要求连续长度不能超过\(K\)
那么我们强制第一个位置没有被染成金色,这样可以防止首尾相接造成的不合法情况。
但是这个位置有\(n\)种选法,同时钦定的这个相当于编号了,而没有编号所以应该除掉\(n-m\)
然后考虑容斥插板。
枚举每一段的长度,可以得到一个长度为\(n-m\)的变量序列:
\(\{x_i\}\)满足\(\forall i,x_i\in[0,k]\)
同时有:

\[\sum\limits_{i=1}^{n-m}x_i=m \]

这样的话就可以直接玩插板容斥了。
设得到的结果为\(r\),那么答案就是:\(dp[n][m]=\frac{n}{n-m}r\)
\(O(\sigma(n))\)

posted @ 2020-02-19 19:52  Lrefrain  阅读(153)  评论(0编辑  收藏  举报