本文中
F 均表示 OGF,
F^ 表示 EGF,
fi 表示
F 的各项系数。
A
[xn](x+x3+x4+x6)d
B
[xn](1+x)(1+x+x2)1−x211−x31
化简得到
[xn](1−x)21=n+1。
C
[xs](1−x1−xm+1)n
D
显然每个数都不相同,所以只需对升序序列计数,答案
×n! 即可。
对于升序序列,可以考虑他们的差分:
∑k=0n[xk]1−x1−xm+1(1−x2x)n−1
E
怎么混入了一个基础背包练习题。
F
===[n!xn]i∑i!xij∣2∑j!xjk∤2∑k!xk[n!xn]ex2ex+e−x2ex−e−x41[n!xn]e3x−e−x43n−(−1)n
G
怎么混入了一个进阶背包练习题。
按照
L 分块,预处理前后缀背包,询问的话 merge 两个背包即可。
H
注意到
a∈{0,1},考虑按
x 分阶段算。
当
a=0 时,设此时的生成函数为
F,容易得到:
F=1−1−xx1=1−2x1−x
当
a=1 时,设这一步的生成函数为
G,容易得到:
G=1−x1
答案为
[xm]F(GF)n=[xm](1−2x)n+11−x。
I
[xk]∏in(1+aix)
J
设走到
i 的概率为
fi,转移为:
fn=∑i=1mfn−ai
分治 NTT 优化 DP,走到不合法的位置时将 dp 值改为
0 即可。
有一个坑是当前位置会和
n 取
min,注意一下。
K
设
fi 表示确定了
p1∼pi 且
i 作为第一个满足
max(p1,p2…pi)=i 的位置,对应的方案数。那么有:
n!=∑i=1nfi(n−i)!
令
gi=i!,可以得到
G=FG+1 即
F=1−G1。
L
限制等价于每个环长不小于
3。
对于单个环,容易得到
∀i≥3,fi=(i−1)!。
把多个环组合起来就是
exp(F^)。
M
原,略。
N
Fi=1−xi1−xi(ai+1)
发现这个东西其实就是付公主的背包,于是可以在
O(nlogn) 时间内求得
∑lnF。
O
看到树及其
deg,考虑 prufer 序。那么得到,每个点在 prufer 序中必须出现
0 或质数次。(
1 号点需要特判)
P=i=0ori∈prime∑xi
则
2∼n 的贡献为
(P^)n−1。
P
f(x)=∑i=0kxn−i
所求即为
f(1),f(2)…f(m),多项式多点求值即可。
Q
先把期望转为总和。
fd=∑i=1naidgd=∑i=1mbidAns^=F^×G^
接下来考虑如何计算
F,G。这两个是等价的,以
F 为例:
F=∑i=1n∑j=1(aix)j=∑i=1n1−aix1
分治 NTT 即可。
R
一般的 dp 为
fi,j=21(fi−1,j−1+fi−1,j+1),但是最左侧与最右侧很讨厌。尝试通过一些手法使得左右端点可以相同转移,容易想到镜像法。具体来说,将序列扩充为
0,1…2n−1,2n,2n−1…2,1(将下标平移了),将首尾连成一个环。此时,每个元素的 dp 值都可以由相邻元素的平均值得到。
于是
F0=1,Fi=21Fi−1(x+x1),答案即为
[xX]FT。注意到我们所需的是
循环卷积,而本题特意保证了项数是
2 的幂次,于是
mod(2n+1−1) 可以在
O(nlogn) 的复杂度内解决。
S
首先明确树上博弈的必胜条件。显然树是一个二分图,于是先手必胜当且仅当初始点位于每一个最大匹配中(有一个坑是这道题询问的是 Alice 必胜,为后手)。那么
type=1 等价于判断
1 号点是否可以不在最大匹配中,
type=2 等价于判断是否存在点可以不在最大匹配中。
type=1
设
A 表示 Alice 必胜的 GF,
B 表示 Bob 必胜的 GF。(都是在有根树中,因为本题限定根节点为
1,答案
×n1 即可)
A=xexpBB=xexp(A+B)−A
B=x(exp(xexpB+B)−expB)
牛顿迭代即可做到单
log 复杂度。
type=2
其实是诈骗。注意到问题等价于判断是否存在完美匹配,而对于一棵树如果存在完美匹配的话匹配方式唯一。
于是可以先生成一个完美匹配,方案数
(2n)!22nn!,然后把这些大小为
2 的联通块连起来,方案数
22nn2n−2。
T
对于一个颜色序列
c0=1,c1…cT−1,cT=1,其贡献为
i=1∏T−1aci。现在需要对所有可能的颜色序列求和。
考虑容斥。首先明确,一共有
T 个相邻位置,如果钦定有
cnt 个相邻位置的颜色一样,则容斥系数为
(−1)cnt。
显然开头结尾比较特殊(颜色已经确定且不带权),先考虑较为普通的中间段(一段内部的颜色相同)。容易写出其生成函数为:
F=∑i=1n1+aixaix
加上开头结尾的贡献,于是答案为:
a1T−1×(−1)T+[xT−1]1−F(1+a1x1)2
生成函数的分子是在枚举开头结尾段的长度,但是发现这样会忘记钦定
cnt=T,于是在前面补上。
问题在于
T 太大了,不能直接多项式求逆做。化简,发现可以写成
PQ,其中
Q 是一个
n 次式,
P 是一个
n+2 次式。于是这等价于一个
n+2 阶线性递推,上一个模板即可。
注:请注意线性递推部分的常数,建议使用 EI 文章中的新·线性递推。本人使用的是老算法,即快速幂 + 多项式取模,一个卡常技巧是注意到模数是不变的,可以把多项式取模模板中只关于模数的部分预处理(主要是多项式求逆)。
U
难点在于写出一份
O(n2) 的暴(正)力(解)。
考虑如何判定一个方案是否可行——扫描每一个时间段,如果该段被覆盖了
>2 次则非法。充要性较为显然,此处不再证明。于是可以
fi,j,0/1/2 表示扫描到了第
i 时间段,已经用过了
j 个区间,目前有多少个区间覆盖当前时间段。转移是
O(1) 的,如果从大到小扫描
j 的话,还可以把
i 删掉。
看到后面的
0/1/2,容易联想到矩阵乘法,发现每次转移的矩阵相同:(把
j 当做多项式中的次数)
[Fi,0Fi,1Fi,2]×100x102x2x1×111012001=[Fi+1,0Fi+1,1Fi+1,2]
分治 NTT 维护矩阵乘法即可。这是因为一个时间段最多让
x 的次数增加
2,而我们只需要
[xn] 的值,因此我们只需要保留
O(2×len) 的项数。
题解区有线性做法,大概是只保留末尾的
O(1) 项进行转移。
V
感觉官方题解写得很清晰啊,抄一下。
显然坐标不能只用整数表示,需要扩域到
23 上,于是不妨设当前坐标为
(2a+3b,2c+3d),用
xaybzcsd 表示。那么所求可以写成:
[x2Hy0z2Ws0](x2+x−2+z2+z−2+(x+x−1)(s+s−1)+(y+y−1)(z+z−1))n
这东西同时出现了二次项和一次项,考虑用我们小学一年级就学过的方法全部转化为一次。设
X=x+x−1,其余各项同理:
(X2−2+Z2−2+XS+YZ)n=(X(X+S)+Z(Z+Y)−4)n
这两部分独立,只需解决
[x2Hs0](X(X+S))k,即可轻松解决原问题。
令
x=pq,s=qp,简单推下式子:
===[x2Hs0]((x+x−1)(x+x−1+s+s−1))k[p2Hq2H]((pq+(pq)−1)(pq+(pq)−1+pq−1+p−1q))k[p2Hq2H](pq+(pq)−1)k(p+p−1)k(q+q−1)ki=0∑k(ik)(H−i+kk)2
于是可以通过一次卷积求出
k=0∼n 上述问题的答案。
W
不太会啊……
X
不太会啊……