• [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 )

    i=km(mi)j=0ik(ij)(t1)j=i=km(mi)j=0ik(ij)p=0j(jp)tp(1)jp=p=0mk(mp)tpj=pmk(mpjp)(1)jpi=j+km(mjij)" role="presentation" style="position: relative;">i=km(mi)j=0ik(ij)(t1)j=i=km(mi)j=0ik(ij)p=0j(jp)tp(1)jp=p=0mk(mp)tpj=pmk(mpjp)(1)jpi=j+km(mjij)
    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

    j=0nk(nj)(1)ji=knj(nji)=i=kn(ni)j=0ni(nij)(1)j=i=kn(ni)[i=n]=1" role="presentation" style="position: relative;">j=0nk(nj)(1)ji=knj(nji)=i=kn(ni)j=0ni(nij)(1)j=i=kn(ni)[i=n]=1
    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\;(ift(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 !

    [xm]Ft=exp(tx)F0=i=0mk1(mi)![xi]exp(tx)=i=0mkti(mi)!i!" role="presentation" style="position: relative;">[xm]Ft=exp(tx)F0=i=0mk1(mi)![xi]exp(tx)=i=0mkti(mi)!i!
    [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 取模,比较麻烦。

    代码

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

  • 相关阅读:
    Linux set 命令的使用方法
    ChatGLM:向量化构建本地知识库原理
    速度+价格,拼多多Temu正在革新跨境电商玩法
    idea插件之Smart Tomcat
    PyQt theme
    C++ 多态与虚拟:Class 语法语义
    Win下Eclipse安装
    【逐步剖C++】-第三章-C++内存管理
    2023亚太杯数学建模A题B题C题思路模型代码论文指导
    [Go 报错] go: go.mod file not found in current directory or any parent directory
  • 原文地址:https://blog.csdn.net/qq_42101694/article/details/126383491