「考试」省选26
Posted lrefrain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「考试」省选26相关的知识,希望对你有一定的参考价值。
T1
dp+多项式。(喜欢的类型)
(dp[i][j])已经插入了(i)个区间,当前的序列长度为(j)的方案。
目标:(dp[m][n])。
初始化:(dp[0][0]=1)
转移:
[dp[i][j]=
egin{cases}
dp[i-1][j]+sumlimits_{k=0}^{j-1}dp[i-1][k](k+1)&i
ot =m\sumlimits_{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)
贡献就是这个序列的乘积乘上(inom{m-1}{i-1})。
就是考虑爆搜的过程中哪一步走(dp[i-1][j])的转移贡献。
已经限定最后一次也就是第(m)次,它必然是第二种转移,所以组合数是(m-1)选(i-1)。
这样的话非序列部分贡献确定了。
求序列部分的贡献。
[prodlimits_{i=1}^{n-1}((i+1)x^1+1x^0)]
可以变换为:
[prodlimits_{i=1}^{n-1}(x^1+(i+1)x^0)]
[F_{n-1}(x)=prodlimits_{i=1}^{n-1}(x+i+1)]
[n=2^w,log n]
[F_{n}(x)
ightarrow F_{2n}(x)]
[F_{2n}(x)=F_{n}(x)F_{n}(x+n)]
[F_{n}(x)=sumlimits_{i=0}^{n}a_ix^i]
[
egin{aligned}
F_{n}(x+n)&=sumlimits_{i=0}^{n}a_i(x+n)^i&=sumlimits_{i=0}^{n}a_isumlimits_{j=0}^{i}inom{i}{j}x^jn^{i-j}\end{aligned}]
卷积两次即可求出(F_{n-1}(x))。
[ans=sumlimits_{i}inom{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))=
egin{cases}
low(y)&qgeq plow(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}sumlimits_{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_iin[0,k])
同时有:
[sumlimits_{i=1}^{n-m}x_i=m]
这样的话就可以直接玩插板容斥了。
设得到的结果为(r),那么答案就是:(dp[n][m]=frac{n}{n-m}r)
(O(sigma(n)))
以上是关于「考试」省选26的主要内容,如果未能解决你的问题,请参考以下文章