题目
题目概要
有
n
n
n 只小白鼠,有
k
k
k 瓶药(其一是毒药)。共
t
t
t 天时间,从第
0
0
0 天开始,你可以给小白鼠任意喝药,次日你可以看到这些小白鼠的存活情况。
你需要在第 t t t 天指出哪瓶药是毒药,且死亡的小白鼠不能超过 p p p 。问最大的可行 k k k 是多少。
对所有 t ∈ [ 1 , q ] t\in[1,q] t∈[1,q] 都回答上面的问题。
思路
考虑一天中能获得的信息:将药按照 2 n 2^n 2n 种小鼠食用情况分类,则毒药会被确定在某一类中。
每一类的最大药瓶数是已知
d
p
\tt dp
dp 状态。因此记
f
t
(
m
)
f_{t}(m)
ft(m) 为,现在还剩
t
t
t 天,有
m
m
m 只鼠的答案,则
f
t
(
m
)
=
∑
i
=
n
−
p
m
(
m
i
)
f
t
−
1
(
i
)
f_t(m)=\sum_{i=n-p}^{m}{m\choose i}f_{t-1}(i)
ft(m)=i=n−p∑m(im)ft−1(i)
这样 O ( p q ) \mathcal O(pq) O(pq) 也算是做完了。
但是
R
a
i
n
y
b
u
n
n
y
\sf Rainybunny
Rainybunny 融汇贯通,从信息熵的角度指出:枚举鼠的死亡情况和时间,可知最多能鉴别出的方案数为
f
t
(
m
)
=
∑
i
=
0
p
(
m
i
)
t
i
f_t(m)=\sum_{i=0}^{p}{m\choose i}t^i
ft(m)=i=0∑p(im)ti
这个式子随后被证明是正确的。我先从组合数学的角度出发,然而因为最初式子写错了,因此就是证不出;修好的推导如下。😓
∑
i
=
k
m
(
m
i
)
∑
j
=
0
i
−
k
(
i
j
)
(
t
−
1
)
j
=
∑
i
=
k
m
(
m
i
)
∑
j
=
0
i
−
k
(
i
j
)
∑
p
=
0
j
(
j
p
)
t
p
(
−
1
)
j
−
p
=
∑
p
=
0
m
−
k
(
m
p
)
t
p
∑
j
=
p
m
−
k
(
m
−
p
j
−
p
)
(
−
1
)
j
−
p
∑
i
=
j
+
k
m
(
m
−
j
i
−
j
)
\begin{align*} &\quad\sum_{i=k}^{m}{m\choose i}\sum_{j=0}^{i-k}{i\choose j}(t-1)^j\\ &=\sum_{i=k}^{m}{m\choose i}\sum_{j=0}^{i-k}{i\choose j}\sum_{p=0}^{j}{j\choose p}t^p(-1)^{j-p}\\ &=\sum_{p=0}^{m-k}{m\choose p}t^p\sum_{j=p}^{m-k}{m-p\choose j-p}(-1)^{j-p}\sum_{i=j+k}^{m}{m-j\choose i-j} \end{align*}
i=k∑m(im)j=0∑i−k(ji)(t−1)j=i=k∑m(im)j=0∑i−k(ji)p=0∑j(pj)tp(−1)j−p=p=0∑m−k(pm)tpj=p∑m−k(j−pm−p)(−1)j−pi=j+k∑m(i−jm−j)
只看
t
p
t^p
tp 以右。作换元
n
:
=
m
−
p
n:=m-p
n:=m−p 其值为
∑
j
=
0
n
−
k
(
n
j
)
(
−
1
)
j
∑
i
=
k
n
−
j
(
n
−
j
i
)
=
∑
i
=
k
n
(
n
i
)
∑
j
=
0
n
−
i
(
n
−
i
j
)
(
−
1
)
j
=
∑
i
=
k
n
(
n
i
)
[
i
=
n
]
=
1
\begin{align*} &\quad\sum_{j=0}^{n-k}{n\choose j}(-1)^{j}\sum_{i=k}^{n-j}{n-j\choose i}\\ &=\sum_{i=k}^{n}{n\choose i}\sum_{j=0}^{n-i}{n-i\choose j}(-1)^j\\ &=\sum_{i=k}^{n}{n\choose i}[i=n]\\ &=1 \end{align*}
j=0∑n−k(jn)(−1)ji=k∑n−j(in−j)=i=k∑n(in)j=0∑n−i(jn−i)(−1)j=i=k∑n(in)[i=n]=1
证明是平凡的,但是发现结论并不是 “数学地”,因此颇让我惊奇。
重新考究这个
f
t
(
m
)
=
∑
i
=
k
m
(
m
i
)
f
t
−
1
(
i
)
f_{t}(m)=\sum_{i=k}^{m}{m\choose i}f_{t-1}(i)
ft(m)=∑i=km(im)ft−1(i),既然规定
f
t
(
i
)
=
0
(
i
<
k
)
f_{t}(i)=0\;(i<k)
ft(i)=0(i<k) 这个和式并没有范围限制,那么其
E
G
F
\rm EGF
EGF 满足
F
t
=
exp
(
x
)
⋅
F
t
−
1
F_t=\exp(x)\cdot F_{t-1}
Ft=exp(x)⋅Ft−1
底部值
F
0
=
∑
i
⩾
k
x
i
i
!
F_0=\sum_{i\geqslant k}\frac{x^i}{i!}
F0=∑i⩾ki!xi 故
[
x
m
]
F
t
=
exp
(
t
x
)
F
0
=
∑
i
=
0
m
−
k
1
(
m
−
i
)
!
[
x
i
]
exp
(
t
x
)
=
∑
i
=
0
m
−
k
t
i
(
m
−
i
)
!
⋅
i
!
\begin{align*} [x^m]F_t &=\exp(tx)F_0\\ &=\sum_{i=0}^{m-k}\frac{1}{(m{-}i)!}[x^i]\exp(tx)\\ &=\sum_{i=0}^{m-k}\frac{t^i}{(m{-}i)!\cdot i!} \end{align*}
[xm]Ft=exp(tx)F0=i=0∑m−k(m−i)!1[xi]exp(tx)=i=0∑m−k(m−i)!⋅i!ti
注意 F t F_t Ft 是 E G F \rm EGF EGF 。结论即证。
得到该结论后,我们只需算 ∑ i = 0 p ( m i ) t i \sum_{i=0}^{p}{m\choose i}t^i ∑i=0p(im)ti 在 t ∈ [ 1 , q ] t\in[1,q] t∈[1,q] 处的值。
多点求值似乎能够做到 O ( q log 2 p ) \mathcal O(q\log^2 p) O(qlog2p) 么?错了,是 O ( q log p + p log 2 p ) \mathcal O(q\log p+p\log^2 p) O(qlogp+plog2p) 。
因为该多项式次数只有 p p p,可以先求 t ∈ [ 0 , p ] t\in[0,p] t∈[0,p] 然后不断点值平移。
然而模数是 2 32 2^{32} 232 。即使我们认为可以 MTT \textit{MTT} MTT,点值平移会涉及的除法也是个大问题。——估计要扩展到对 2 32 + p + log q 2^{32+p+\log q} 232+p+logq 取模,比较麻烦。
代码
搬题人改编了它,因此不能复制代码,故而不写了。