专栏文章

题解:AT_tenka1_2019_f Banned X

AT_tenka1_2019_f题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@minrnfo2
此快照首次捕获于
2025/12/02 07:14
3 个月前
此快照最后确认于
2025/12/02 07:14
3 个月前
查看原文
本题可以做到线性。
首先显然我们 00 无所谓,计算 f(m)f(m) 表示只有 mm1/21/2 的方案数,然后加起来,ans=m=0n(nm)×f(m)ans=\sum\limits_{m=0}^n \binom{n}{m}\times f(m)
考虑 f(m)f(m) 怎么算。首先 <X1\sum\lt X-1 肯定是对的。这个我们可以先计算。设 F(n,m)F(n,m) 表示 nn 个值域 [1,2][1,2] 内的数和为 mm 的方案数,这个显然就是 (nmn)\binom{n}{m-n}。枚举 s[0,X1)s\in[0,X-1),先把 F(m,s)\sum F(m,s) 算到贡献里。
然后注意到,如果 sX1s\geq X-1,则序列一定出现了 X1X-1 这个前缀和。
因为你不可能出现 XX,又不可能直接跳到 X+1X+1(序列内值域为 [1,2][1,2])。
然后我们枚举什么时候 X1X-1 这个前缀和出现,设 j=1iaj=X1\sum\limits_{j=1}^i a_j=X-1,则可以发现,ai+1=2a_{i+1}=2,因为填 11 就出现 XX 了。而 a1=2a_1=2,因为如果填 11[2,i+1][2,i+1] 就是 XX 了。
同理可以推出来 j[1,mi]j\in[1,m-i]j[i+1,m]j\in [i+1,m]aja_j 都必须是 22
mii+1m-i\geq i+1 就是全填 22,可以直接判掉。如果 2iX12i\geq X-1XX 是奇数,那么全填 22 就合法。
mi<i+1m-i\lt i+1 那么就是 m2×(mi)m-2\times(m-i) 个值域在 [1,2][1,2] 的数,要求和为 X12×(mi)X-1-2 \times(m - i)。就是 F(m2×(mi),X12×(mi))F(m-2\times(m-i),X-1-2 \times(m - i))
然后 O(n2)\mathcal O(n^2) 就做完了。
考虑优化到 O(n)\mathcal O(n)
首先前面的这个 F(m,s)\sum F(m,s) 先展开成 j=0min{m,X1m1}(mj)\sum\limits_{j=0}^{\min\{m,X-1-m-1\}}\binom{m}{j}
这个就是动态的下指标求和,参考这个题 https://atcoder.jp/contests/tenka1-2014-final/tasks/tenka1_2014_final_d,我们组合数移动一个指标的时候,是可以 O(1)\mathcal O(1) 更新的。利用这个就可以直接把 F(m,s)\sum F(m,s) 优化掉。
然后 mii+1m-i\geq i+1 这个显然取到 i=(m1)/2i=\lfloor (m-1)/2\rfloor,这个可以直接判掉。
剩下的就是 i=(m1)/2+1m(2×imX1m)\sum\limits_{i=\lfloor (m-1)/2\rfloor+1}^{m} \binom{2\times i-m}{X-1-m}
这个是上指标求和但是隔一个求一个。
现在我们考虑怎么求这个。接下来的部分抄袭了 ChatGPT。
k=X1mk=X-1-m,我们关心的是 j=0jm(mod2)m(jk)\sum\limits_{j=0\land j\equiv m\pmod 2}^{m}\binom{j}{k}
Sodd=j1(mod2)(jk),Seven=j0(mod2)(jk)S_{\text{odd}}=\sum\limits_{j\equiv 1\pmod{2}}\binom{j}{k},S_{\text{even}}=\sum\limits_{j\equiv 0\pmod{2}}\binom{j}{k}
A=j=0m(jk),B=j=0m(1)j(jk)A=\sum\limits_{j=0}^{m}\binom{j}{k},B=\sum\limits_{j=0}^{m}(-1)^j\binom{j}{k}
A=Seven+Sodd,B=SevenSoddA=S_{\text{even}}+S_{\text{odd}},B=S_{\text{even}}-S_{\text{odd}}
所以 ans=A+(1)mB2ans=\frac{A+(-1)^{m}B}{2}
考虑 AA 怎么算。这个是上指标求和,曲棍球恒等式,A=(m+1k+1)A=\binom{m+1}{k+1}
BB,我们使用一些 GF 手法。
因为 (jk)=[xk](1+x)j\binom{j}{k}=[x^k](1+x)^j,所以有:
B=j=0m(1)j(jk)=[xk]j=0m(1)j(1+x)j=[xk]j=0m((1+x))j=[xk]j=0m1((1+x))m+11((1+x))\begin{aligned} B &=\sum\limits_{j=0}^{m}(-1)^j\binom{j}{k}\\ &=[x^k]\sum\limits_{j=0}^{m}(-1)^j(1+x)^j\\ &=[x^k]\sum\limits_{j=0}^{m}(-(1+x))^j\\ &=[x^k]\sum\limits_{j=0}^{m}\frac{1-(-(1+x))^{m+1}}{1-(-(1+x))} \end{aligned}
其中最后一步是等比数列求和。
化简一下分母:B=[xk]j=0m1((1+x))m+12+xB=[x^k]\sum\limits_{j=0}^{m}\frac{1-(-(1+x))^{m+1}}{2+x}
我们分成两部分:B=[xk]j=0m12+x[xk]j=0m((1+x))m+12+xB=[x^k]\sum\limits_{j=0}^{m}\frac{1}{2+x}-[x^k]\sum\limits_{j=0}^{m}\frac{(-(1+x))^{m+1}}{2+x}
第一部分:
12+x=12×11+x2=12×s0(1)s(x2)s=s0(1)s2s1xs\begin{aligned} \frac{1}{2+x} &=\frac{1}{2}\times\frac{1}{1+\frac{x}{2}}\\ &=\frac{1}{2}\times \sum\limits_{s\geq 0}(-1)^s \left(\frac{x}{2}\right)^s\\ &=\sum\limits_{s\geq 0}(-1)^s 2^{-s-1} x^s \end{aligned}
所以 [xk]j=0m12+x=[xk]12+x=(1)k2(k+1)=(1)k12k+1[x^k]\sum\limits_{j=0}^{m}\frac{1}{2+x}=[x^k]\frac{1}{2+x}=(-1)^k 2^{-(k+1)}=(-1)^k \frac{1}{2^{k+1}}
第二部分:
首先 ((1+x))m+1=(1)m+1(1+x)m+1(-(1+x))^{m+1}=(-1)^{m+1}(1+x)^{m+1}
然后你拿 12+x\frac{1}{2+x} 的形式幂级数和 (1+x)m+1=t=0m+1(m+1t)xt(1+x)^{m+1}=\sum\limits_{t=0}^{m+1}\binom{m+1}{t}x^t 卷到一起。
[xk](1+x)m+12+x=t=0k(m+1t)×[xkt]12+x=t=0k(m+1t)×(1)kt2(kt+1)\begin{aligned} \left[x^k\right]\frac{(1+x)^{m+1}}{2+x} &=\sum\limits_{t=0}^k\binom{m+1}{t}\times [x^{k-t}]\frac{1}{2+x}\\ &=\sum\limits_{t=0}^k\binom{m+1}{t}\times (-1)^{k-t} 2^{-(k-t+1)} \end{aligned}
所以这个式子最后就是:
(1)m+1t=0k(m+1t)×(1)kt2(kt+1)=(1)m+1(1)k12k+1t=0k(m+1t)×(1)t2t=(1)m+1(1)k12k+1t=0k(m+1t)×(2)t\begin{aligned} &(-1)^{m+1}\sum\limits_{t=0}^k\binom{m+1}{t}\times (-1)^{k-t} 2^{-(k-t+1)}\\ =&(-1)^{m+1}(-1)^{k}\frac{1}{2^{k+1}}\sum\limits_{t=0}^k\binom{m+1}{t}\times (-1)^{t}2^{t}\\ =&(-1)^{m+1}(-1)^{k}\frac{1}{2^{k+1}}\sum\limits_{t=0}^k\binom{m+1}{t}\times (-2)^{t}\\ \end{aligned}
然后考虑怎么求:
t=0k(m+1t)×(2)t\sum\limits_{t=0}^k\binom{m+1}{t}\times (-2)^{t}
这个。
这个是下指标求和带一个 (2)t(-2)^t
类似于普通的动态下指标求和,这里改下指标也是可以 O(1)\mathcal O(1) 的。然后上指标增加的转移是 nn+1,ans2×(2)k×(nk)ansn\gets n+1,ans\gets 2 \times (-2)^k \times \binom{n}{k}-ans
好的,然后推完了,预处理阶乘、阶乘逆元、2k2^k2k2^{-k} 等即可做到 O(n)\mathcal O(n)

评论

2 条评论,欢迎与作者交流。

正在加载评论...