CYEZ 模拟赛 5

难难比赛。

A 堆

f i f_i fi 表示 i i i 时的答案, L , R L,R L,R 分别为左右子树。把 f f f 视为相对大小,易得下式:

f i = ( i − 1 L ) f L f R f_i = \binom {i-1}{L} f_Lf_R fi=(Li1)fLfR

L , R L,R L,R 中一定有一颗满二叉树。可以 O ( 1 ) O(1) O(1) 得到均为满二叉树时的上下界,根据实际大小与上下界的偏离程度可以得到具体的 L , R L,R L,R 大小。

组合数计算次数为 O ( log ⁡ n ) O(\log n) O(logn),考虑分段打表处理组合数。记 B B B 为块长,类似分块的思想,整块打表预处理,散块暴力算。又因为 L , R L,R L,R 中有一颗为满二叉树,打表预处理出满二叉树的答案。

至此,时间复杂度 O ( B log ⁡ n ) O(B \log n) O(Blogn),空间复杂度 O ( n B ) O(\frac {n}{B}) O(Bn)

代码

B 密文

根据异或的传递性,知道了 a a a 知道了 a ∧ b a \land b ab 便知道了 b b b。将区间视为边,相当于在这张完全图上做 MST。

Xor-MST。

C 树

总结

预计 60 + 40 + 0 60+40+0 60+40+0,实际 60 + 40 + 0 60+40+0 60+40+0。A 场上似乎想到了分块的思想,但没有尝试过并没有加以实现。B 写了 n 2 n^2 n2 的 MST。C 为啥不打暴力??

你可能感兴趣的:(比赛,算法)