T1:白玉楼前(youmu)
妖梦现在要玩幽幽子的游戏,她才能拿回自己的半灵。
游戏规则是这样的:
幽幽子有 n 个点,现在她让妖梦对每个点随机一条出边 (随机到每个点的概率都相等),然后得到一张图。(注意:可以自环)
如果这张图任意一个点沿着边走两步(显然这样的走法唯一)都能到达自身,则幽幽子可以通关。
现在幽幽子想问妖梦,她通关的概率是多少?
两个图不同,当且仅当存在一条边出现在图 A 中且不出现在图 B 中。图中的点有编号,边无编号。
答案 mod 998244353。
提示:答案必定可以表示成
q
p
\frac{q}{p}
pq
的形式,在模意义下,
q
p
=
p
×
q
−
1
\frac{q}{p}=p\times q^{-1}
pq=p×q−1,其中
q
−
1
q^{-1}
q−1是
q
q
q 的逆元。*
测试的时候,想到枚举二点环数,即可得到
a
n
s
=
∑
i
=
1
n
C
n
2
×
i
×
∏
j
=
1
n
2
(
2
j
−
1
)
ans=\sum_{i=1}^{n}C_{n}^{2\times i}\times\prod_{j=1}^{\frac{n}{2}}(2j-1)
ans=∑i=1nCn2×i×∏j=12n(2j−1)
时间效率
O
(
T
n
)
O(Tn)
O(Tn),T 到飞起
考虑新加入一个点时,要么自环,要么和其他点成环
即可得到 dp 式
f
[
i
]
=
f
[
i
−
1
]
+
f
[
i
−
2
]
∗
(
i
−
1
)
f[i]=f[i-1]+f[i-2]*(i-1)
f[i]=f[i−1]+f[i−2]∗(i−1),预处理即可
T2:式神守护(yukari)
紫妈有 n 个隙间排成一列,每个隙间都有一个权值 i val 。
她可以选出某些隙间来召唤式神:一组隙间能成功召唤式神当且仅当他们的权值和为 m 的倍数。(可以是 0 倍)
现在紫妈试图召唤 Q 次式神,每次给出一个 i i l 和 r , 她试图在第 i i l 到 r 个隙间中召唤式神,
她会选择其中一些隙间(不一定需要连续的一些)召唤式神。她想知道,有多少种方案可以成功召唤式神。
会对答案造成贡献的,只有 %
m
m
m 为
0
0
0 的情况,很容易想到用线段树处理出
0
—
(
m
−
1
)
0—(m-1)
0—(m−1)的情况,然后
m
2
m^2
m2 合并,查询的时候带着边查边合并就好了,但是时间过不去
考虑分治
对于
r
<
m
i
d
r<mid
r<mid 或者
l
>
m
i
d
l>mid
l>mid 交给下一层去做
对于
l
<
=
m
i
d
r
>
=
m
i
d
l<=mid r>=mid
l<=midr>=mid 的情况,记
f
[
i
]
[
j
]
f[i][j]
f[i][j] 表示从
m
i
d
mid
mid 向左到
i
i
i 这个位置模数为
j
j
j 的方案数,
g
[
i
]
[
j
]
g[i][j]
g[i][j] 表示从
m
i
d
mid
mid 向右到
i
i
i 这个位置模数为
j
j
j 的方案数,
a
n
s
=
∑
i
=
0
m
−
1
f
[
l
]
[
i
]
∗
g
[
r
]
[
m
−
i
]
ans=\sum_{i=0}^{m-1}f[l][i]*g[r][m-i]
ans=∑i=0m−1f[l][i]∗g[r][m−i],即类似于整体二分
T3:西行妖下(yuyuko)
幽幽子站在西行妖下,她需要解封西行妖最后的力量。
西行妖可以当作一个有
n
n
n 个点的树,每个点都有一些符文,初始每个点符文个数为
1
1
1。
幽幽子可以施展魔法,将符文随机移动,来解封封印。
每个点上的符文可以看作是一个
1
m
1~m
1 m 的排列,原本的状态为
1
,
2
,
3
,
4
,
…
…
,
m
1,2,3,4,……,m
1,2,3,4,……,m 按顺序排列 (
m
m
m 为符文的个数)。想要解封一个点上的封印,要求排列中对于任意的
i
i
i,
p
i
!
=
i
p_i!=i
pi!=i 。幽幽子每次的魔法效果是随机形成一个排列,尝试能否解除封印。
幽幽子每次会走过一条路径,从
s
s
s 到
t
t
t,对每个点施展一次魔法,并询问能解封的点的期望个数。
现在有
Q
Q
Q 次操作:
Add s t x 在
s
s
s 到
t
t
t 的路径上每个点加
x
x
x 个新的符文。
Multi s t x 在
s
s
s 到
t
t
t 的路径上,每个点符文个数
×
x
\times x
×x。
Query s t 求从
s
s
s 到
t
t
t 解封点的期望个数是多少。
(注意:每次 Query 操作是独立的,即前一次 Query 中施展的魔法在 Query 结束时被立即撤销,所有走过的路径上点的符文排列变为
p
i
=
i
p_i=i
pi=i,对后续操作不产生影响)
错排的方案数为
f
[
i
]
=
(
f
[
i
−
1
]
+
f
[
i
−
2
]
)
∗
(
i
−
1
)
f[i]=(f[i-1]+f[i-2])*(i-1)
f[i]=(f[i−1]+f[i−2])∗(i−1),概率即为
f
[
i
]
i
!
\frac{f[i]}{i!}
i!f[i]
通过枚举可以发现,概率具有收敛性,值在
i
>
20
i>20
i>20 后稳定在
0.367879
0.367879
0.367879 左右(不会证明)
那么每个点被修改的次数不会超过 20
在线段树上大力修改单点修改每个点的值即可,套个树剖