AtCoder Beginner Contest 241

A,B,C 略过。。。

D

注意到 \(k \leq 5\),所以用 multiset 维护,每次查询直接往前或者往后跳 \(k\) 步。

代码

E

vp 做法:

注意到 \(\log_2 10^{12} \approx 40\),于是考虑倍增。

\(f(i,j)\) 表示跳了 \(2^i\) 步,当前选了 \(j\) 组成的 \(a_i\) 的和。

那么转移就是:\(f(i,j)=f(i-1,j)+f(i-1,(j+f(i,j) \mod n))\)

代码

更简单的做法:

显然这个东西一定有循环节,长度应该是 \(\mathcal O(n)\) 级别的。

那么考虑找出这个循环节,之后就好做了。

代码

F

发现网格很大,很难处理,但是题目要求是碰到障碍才会停下,所以能到达的只有起点和与障碍相邻的点可能到达,一共有 \(4n\) 个,相当于四个方向 bfs 寻找最短路,用 set 维护每行每列的障碍。

代码

G

待补。

Ex

考虑对每个牌写出生成函数:\(F_i(x)=\displaystyle \sum_{j=0}^{B_i} A_i^j x^j=\dfrac{1-A_i^{B_i+1}}{1-A_ix}\)

那么要求的就是 \([x^m]\dfrac{\prod_i 1-A_i^{B_i+1}}{\prod_i 1-A_ix}\)

分子可以直接枚举子集求出,记为 \(a_s\),接下来考虑分母。

我们考虑进行一个转化:\(\dfrac{1}{\prod_i 1-A_ix}=\sum_i \dfrac{b_i}{1-A_ix}\)

(至于为什么能这么做,可以参考 这个 (待研究))

两边同时乘上 \(\prod_i 1-A_ix\),得到 \(\sum_i b_i \prod_{j \neq i} 1-A_jx\)

然后考虑带入特殊值 \(A_1^{-1},A_2^{-1},\cdots,A_n^{-1}\)

于是得到 \(b_i=\dfrac{1}{\prod_{j \neq i}1-A_jA_i^{-1}}\)

那么把这两部分乘起来,就是答案。

代码

posted @ 2022-03-15 21:11  Nylch  阅读(81)  评论(0编辑  收藏  举报