[CF643F]Bears and Juice

题目

传送门 to CF

题目概要
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=npm(im)ft1(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=0p(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=km(im)j=0ik(ji)(t1)j=i=km(im)j=0ik(ji)p=0j(pj)tp(1)jp=p=0mk(pm)tpj=pmk(jpmp)(1)jpi=j+km(ijmj)

只看 t p t^p tp 以右。作换元 n : = m − p n:=m-p n:=mp 其值为
∑ 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=0nk(jn)(1)ji=knj(inj)=i=kn(in)j=0ni(jni)(1)j=i=kn(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)ft1(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)Ft1

底部值 F 0 = ∑ i ⩾ k x i i ! F_0=\sum_{i\geqslant k}\frac{x^i}{i!} F0=iki!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=0mk(mi)!1[xi]exp(tx)=i=0mk(mi)!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 取模,比较麻烦。

代码

搬题人改编了它,因此不能复制代码,故而不写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值