概述
Description
传送门
Solution
这题神了。
为方便叙述,令
a
i
a_i
ai 表示第
i
i
i 只蛇的毒性,
F
i
=
∑
j
∈
i
a
j
F_i=sum_{j in i} a_j
Fi=∑j∈iaj,
G
i
=
∑
i
∈
j
a
j
G_i=sum_{i in j}a_j
Gi=∑i∈jaj,其中
x
∈
y
x in y
x∈y 表示
x
x
x 是
y
y
y 的子集;令某次询问中 ?
有
x
x
x 个,0
有
y
y
y 个,1
有
z
z
z 个。
Part 1: 暴力
一种朴素的做法是,暴力枚举每个 ?
填上
0
0
0 还是
1
1
1。
时间复杂度 O ( 2 x ) O(2^x) O(2x)。
Part 2: 对 0 0 0 容斥
考虑对
0
0
0 进行容斥: 钦定一些
0
0
0 不满足要求(也就是说在该位上填
1
1
1 而非
0
0
0),剩下的
0
0
0 看做 ?
;显然,各种情况的方案数乘容斥系数之和即为答案。
不难发现,方案数就是 G m a s k G_{mask} Gmask,其中 m a s k mask mask 表示 ⌈ lceil ⌈ 所有钦定不满足要求的位置集合 s s s ⌋ rfloor ⌋ 和 ⌈ lceil ⌈ 所有原来就已经固定为 1 1 1 的位置集合 ⌋ rfloor ⌋ 的并集,容斥系数就是 ( − 1 ) ∣ s ∣ (-1)^{|s|} (−1)∣s∣。
时间复杂度 O ( 2 y ) O(2^y) O(2y)。
Part 3: 对 1 1 1 容斥
与 Part 2 同理,钦定一些
1
1
1 不满足要求。方案数就是
F
m
a
s
k
′
F_{mask'}
Fmask′,其中
m
a
s
k
′
mask'
mask′ 表示
⌈
lceil
⌈ 所有没有钦定不满足要求的位置集合
⌋
rfloor
⌋ 和
⌈
lceil
⌈ 所有原来填有 ?
的位置集合
⌋
rfloor
⌋ 的并集,容斥系数就是
(
−
1
)
∣
s
′
∣
(-1)^{|s'|}
(−1)∣s′∣。
时间复杂度 O ( 2 z ) O(2^z) O(2z)。
综上所述,我们将 x , y , z x,y,z x,y,z 排个序;若 x x x 最小那么调用 Part 1,若 y y y 最小那么调用 Part 2,若 z z z 最小那么调用 Part 3。
注意到 x + y + z = n x+y+z=n x+y+z=n,所以 min ( x , y , z ) ≤ ⌊ n 3 ⌋ min(x,y,z) le lfloor frac n 3 rfloor min(x,y,z)≤⌊3n⌋,总复杂度 O ( 2 n n + q 2 ⌊ n 3 ⌋ ) O(2^n n+q2^{lfloor frac n 3 rfloor}) O(2nn+q2⌊3n⌋),可以通过本题。
Code
提交记录
最后
以上就是自由心情为你收集整理的「JOI 2018 Final」毒蛇越狱 题解DescriptionSolutionCode的全部内容,希望文章能够帮你解决「JOI 2018 Final」毒蛇越狱 题解DescriptionSolutionCode所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复