Educational Codeforces Round 133
https://codeforces.com/contest/1716
E. Swap and Maximum Block
给一个长度 2^n 的数组a, 值范围是[1~2^n]
q个询问,
每个询问, 给k, for i = [1..2^n-2^k], 如果该轮询问没有交换过a[i],则交换swap(a[i],a[i+2^k])
操作后, 输出最大的连续区间的和
范围
n 18
a[i] \in [-1e9,1e9]
q 2e5
4s
512mb
我的思路
很显然 就是一个满完全二叉树
而操作k 就是从下向上第k层左右交换,(第k-1层每个点交换左右儿子)
问题是如何维护最大值, 或者如何算最大值
考虑直接算,
f(l..r) = max(f(l..mid),f(mid+1..r),maxr(l..mid) + maxl(mid+1..r))
maxr(l…r) = max(suffix(l…r))
maxl(l…r) = max(prefix(l…r))
但问题是 交换会让比 n-k层更低的 都会影响
感觉可能的方向, 就是 暴力从下向上, 枚举所有
似乎 就 层数的个数 和层数的方案数的乘积都是2^n, 这样就是n 2^n???
题解
还真是这样
代码
https://codeforces.com/contest/1716/submission/189373554
1 |
|
F. Bags with Balls
n个包1到n(包两两不同), 每个包有m球, 编号1..m
需要 每个包 取一个, F=(球上数字为奇数的个数)
计算 对于所有方案w, sum_w ((F_w)^k)
mod 998244353
范围
t 5000 测试点
n,m [1,MOD-1]
k 2000
我的思路
n,m 这么大, 所以 F范围也是[1,MOD-1]
枚举F算贡献都不太可能
但朴素一点, 直接想到的就是枚举F算贡献
c[f]= 有f个球是奇数的方案数 = binom(n,f) * ((m+1)/2)^f * (m-(m+1)/2)^{n-f}
ans = sum_{f=0}^n c[f] * f^k
k=0的时候还好,看起来就是二项式展开 $((m-\lfloor \frac{m+1}{2} \rfloor) + \lfloor \frac{m+1}{2} \rfloor)^n = m^n$
k=1的时候也还行,可以转化成 $n x \binom{n-1}{f-1} x^{f-1} (m-x)^{n-f}, x=\lfloor \frac{m+1}{2} \rfloor$ 即 $n \lfloor \frac{m+1}{2} \rfloor m^{n-1}$
k=2的时候, 感觉是不是要上求导什么的了
$\binom{n}{f} x^f (m-x)^{n-f} f^2, x=\lfloor \frac{m+1}{2} \rfloor$
题解
的确可以求导推!!
数学 推
$\sum_{i=0}^{n}i^k \binom{n}{i} \left ( \left \lceil \frac{m}{2} \right \rceil \right )^i \left ( \left \lfloor \frac{m}{2} \right \rfloor \right )^{n-i}$
$=\sum_{i=0}^{n}\sum_{j=0}^{k}\begin{Bmatrix} k\\ j \end{Bmatrix}i^{\underline j}\binom{n}{i} \left ( \left \lceil \frac{m}{2} \right \rceil \right )^i \left ( \left \lfloor \frac{m}{2} \right \rfloor \right )^{n-i}$
$=\sum_{i=0}^{n}\sum_{j=0}^{k}\begin{Bmatrix} k\\ j \end{Bmatrix}\binom{n-j}{i-j}n^{\underline j} \left ( \left \lceil \frac{m}{2} \right \rceil \right )^i \left ( \left \lfloor \frac{m}{2} \right \rfloor \right )^{n-i}$
$=\sum_{j=0}^{k}\begin{Bmatrix} k\\ j \end{Bmatrix} n^{\underline j} (\left \lceil \frac{m}{2} \right \rceil)^j (\sum_{i=0}^{n}\binom{n-j}{i-j} \left ( \left \lceil \frac{m}{2} \right \rceil \right )^{i-j} \left ( \left \lfloor \frac{m}{2} \right \rfloor \right )^{n-i})$
$=\sum_{j=0}^{k}\begin{Bmatrix} k\\ j \end{Bmatrix} n^{\underline j} (\left \lceil \frac{m}{2} \right \rceil)^j m^{n-j}$
代码
https://codeforces.com/contest/1716/submission/189445390
1 |
|
总结
评分都是2500
E 但实际上 好好思考一下计算,和 思考一下数量级,就很显然 暴力就完了, 没啥难的
F
数学太菜,
不过这里学会了以后如果在 求和里看到 $binom \cdot n^m$的时候, 就可以去想用斯特林数拆$n^m$了
以及第二类斯特林数也不熟悉