Skip to content

P13833 【MX-X18-T5】「FAOI-R6」纯蓝 笔记

前置知识:有上限排列计数

  • 由异或最值问题,想到 0/1 Trie。

在 0/1 Trie 上考虑能够成为答案的 ai,aj 满足什么性质,容易发现他们的高位是相同的,因此他们在值域上必然是相邻的两个数。

这样子将限制从“任意两个异或最小值”变为“排序后相邻两数异或最小值”。由有上限排列计数(ai=ajf(a)=0 无贡献),启发我们只用 DP 出一个单调递减序列的方案数。

可以发现,当枚举最小值 k 时,DP f(a)=k 不容易,但是 DP f(a)>k 是简单的,似乎可以容斥,但是考虑到最后要求 f(a),本质就是求 k=0+[f(a)>k],因此只要 DP 出这个方案数就好了。

fi,j 表示考虑到 ai 个大的数,第 i 个是 j 的方案数,则有

fi,j=(c(j)i+1)x>j,xj>kfi1,x

状态数 O(nV),转移 O(V),需要进行 O(V) 次 DP,时间复杂度 O(nV3),难以接受。考虑优化。

优化状态数

感受一下 0/1 Trie 的过程,这个 k 应该不会很大,因为要求两两异或都能大于 k2p,即 V÷2pn1,解得 k2V÷n

因此时间复杂度变为 O(V3)

优化转移

这个 转移使用了 O(V) 的时间,启示使用前缀和、FWT 等科技优化。

考虑瓶颈 xj>k,它必然是前面几位 x[13,h)j[13,h)>k[13,h),后面几位 x[h,0]j[h,0]=k[h,0],对两个条件的判断都没有影响,可以任取。

那么考虑枚举 hj[13,h),计算得 x[13,h)=j[13,h)(k[13,h)+1),对于这一部分相同的 xj 一次性转移,使用差分和前缀和即可解决。

时间复杂度 O(V2)

最近更新