「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】
「ARC 139F」Many Xor Optimization Problems
对于一个长为 \(n\) 的序列 \(a\),我们记 \(f(a)\) 表示从 \(a\) 中选取若干数,可以得到的最大异或值。
现在给定 \(n,m\),你需要对于所有长为 \(n\),且 \(0\le a_i<2^m\) 的序列,计算 \(f(a)\) 的和。
\(1\le n,m\le 250000\)。
PS:本题解的做法可以做到 \(n=10^9,m=10^7\)。
Solution
考虑给定序列 \(a\),我们计算 \(a\) 的正交线性基,不妨设基底有 \(k\) 个元素,其最高位分别为 \(a_1<a_2<\cdots<a_k\)。显然最大异或值就是这 \(k\) 个元素的异或和。
这启发我们去枚举 \(k\) 以及 \(a_1,\cdots,a_k\) 计算对答案的贡献,贡献由三部分相乘得到:
多少个序列 \(a\),满足它的正交线性基满足基底有 \(k\) 个元素,且最高位分别为 \(a_1,\cdots,a_k\);
这 \(k\) 个元素期望和;
序列 \(a\) 的这 \(k\) 个基底的其他 \(m-k\) 位的填法。
对于第 1 部分,我们先只关心这 \(k\) 个位,考虑如下流程:
- 初始线性基 \(S\) 大小为空;
- 加入 \(a_i\):
- 它与线性基内元素线性相关。那么有 \(2^{|S|}\) 种方案;
- 它与线性基内元素线性无关。那么有 \(2^k-2^{|S|}\) 种方案。
因此,方案为:
\]
容易看出前半部分为经典的 q-binomial,令 \(H(x)=\sum\limits_{k} \binom{n}{k}_2 x^k\),容易递推求出其所有项。
对于第 2 部分,显然这 \(k\) 位必定是 \(1\),其余位都以 \(\frac 1 2\) 的概率是 \(1\),因此期望和为:
\]
对于第 3 部分,由于是正交线性基,因此对于 \(a_j\) 所在的元素而言,所有 \(a_i<a_j\) 的 \(a_i\) 位必须为 \(0\),其他位没限制,因此方案数为:
\]
将三部分相乘,得到:
\]
计算这个式子,我们拆成 \(-1\)、\(\sum\limits_{i=1}^{k}2^{a_i}\)、\(2^{a_k+1}\) 三块分别计算。
- 第一块
显然要的就是 \([x^k]\prod\limits_{i=0}^{m-1}(1+2^ix)\)。
设 \(G(x)=\prod\limits_{i=0}^{m-1} (1+2^ix)\),易知:
\]
对比 \([x^i]\) 项系数得:
\]
可以 \(\mathcal O(m)\) 递推得到。
- 第二块
这次乘上了 \(\sum a_i\) 的贡献,注意到 \(\sum a_i\) 可以看成是 \(2^m-1\) 再减去不在 \(a_i\) 的那些 \(2^i\)。
于是贡献就很显然了,是 \((2^m-1)[x^k]G-(k+1)[x^{k+1}]G\)。
- 第三块
这次乘上了最大值(\(a_k\))的贡献,考虑枚举最大值为 \(mx\):
\(F(x)=\sum\limits_{mx=0}^{m-1}(2^{mx})^2\prod\limits_{i=0}^{mx-1}(1+2^ix)\),易知:
\]
对比 \([x^i]\) 项系数得:
\]
仍可以 \(\mathcal O(m)\) 得到。
因此总时间复杂度 \(\mathcal O(m+\log \text{mod})\)。
参考代码可以见 此 link,我偷懒所以逆元部分写的带 log 了,以及求 \(2^{n}\) 的地方带上了 \(\mathcal O(n)\)。
「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】的更多相关文章
- 「TJOI / HEOI2016」求和 的一个优秀线性做法
我们把\(S(i, j)j!\)看成是把\(i\)个球每次选择一些球(不能为空)扔掉,选\(j\)次后把所有球都扔掉的情况数(顺序有关).因此\(S(i, j)j! = i\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
随机推荐
- JavaScript 遍历对象、数组总结
在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天抽空把经常用到的方法小结一下,方便今后参考使用! javaScript遍历对象总结 1.使用Objec ...
- 将word文件转为excel文件
有些word文件里的数据是有顺序或者规律,想转成表格的形式,下面就以我要转的word为例. 我的word文件是这样的 1.word转txt(文本文件) 文件--->另存为--->路径--- ...
- 为什么HashMap使用红黑树而不使用AVL树
为什么HashMap使用红黑树而不使用AVL树? 红黑树适用于大量插入和删除:因为它是非严格的平衡树:只要从根节点到叶子节点的最长路径不超过最短路径的2倍,就不用进行平衡调节 AVL 树是严格的平衡树 ...
- 解决k8s故障,eureka处于unknow的问题
//pod Unknown状态,开始强制删除eureka-server-node-0,eureka-server-node-1等,强制删除不了 [root@fp158 sts]# kubectl de ...
- 帝国CMS灵动标签调用相关文章
标题包含关键字①.比较粗糙的匹配,可能不太精确:title like '%$navinfor[keyboard]%' ②.精确的匹配,比较消耗资源:title regexp '(^|,)$navinf ...
- linux部署项目访问mysql问题
springboot以war包形式传到webapps下面,mysql创建库和表,war包里配置数据源是localhost,然后运行tomcat是没有问题的,可以访问通mysql正常请求服务. ssm以 ...
- Windows下FFMEPG编译
FFMPEG在Windows下编译(MIMO431) /************************************************************************ ...
- 5.Java程序运行机制
一.编译型和解释型语言区别 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以任何的高级语言编写的程序都必须转换成计算机语言,也就是机器码.而这种转换的方式有两种: 编译 ...
- Java学习day32
生产与消费者问题:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者从仓库中取走产品:如果仓库中没有产品,生产者就将产品放入仓库,否则就停止生产等待:如果仓库中有产品,消费者就取走,否 ...
- Python 一网打尽<排序算法>之先从玩转冒泡排序开始
1. 前言 所谓排序,就是把一个数据群体按个体数据的特征按从大到小或从小到大的顺序存放. 排序在应用开发中很常见,如对商品按价格.人气.购买数量--显示. 初学编程者,刚开始接触的第一个稍微有点难理解 ...