1 线性基练习题
我更喜欢的是研究东西的乐趣。
老年选手写不了代码了。悲。
如何构造的
理解这个对做题非常有帮助的。
假设插入一个
从高到低位,如果这一位上
如果到最后都没有成功插入,说明
性质一:最高位 1 的位置互不相同。 这是根据上面的构造方法得出的。
性质二:任意一个可以用这些基底组合出的向量
性质三:线性基的任意一个子集异或和不为 0。否则不会插入。
CF895C Square Subsets
对于数组
,求从中间选择非空子集,使它们的乘积等于某个整数的平方的方法的数量。 。
平方有个经典套路就是分解质因数,每个指数都是偶数。
假设所有 ai 先不同。并且每个指数都保留 0/1。显然我们需要凑出偶数个 1。也就是异或和为 0。(这里线性基的大小是 30 左右)
可以依次插入线性基,然后判断 insert 是否失败,如果失败说明可以凑出。但是我们现在是计数。
很容易发现可以构造一组基来表示出所有剩下的数,并且钦定所有构造的数都选。其余数任意选。证明是很容易的,考虑每次插入占据一位。所以基的大小也是唯一的。又根据性质三知道选的数里面选子集凑不出合法的。
P4151 [WC2011] 最大XOR和路径
题意: 求从
经过所有边边权异或和最大的路径。
很经典的套路。但是证明不是那么简单。我不会证。
路径上有很多个环十分难办。(你可以走多次抵消这条边的贡献)因为没有好办法都构造出来。此时可以用线性基来表示。
求一个根为 1 的生成树,每次遇到返祖边就把当前这个环的异或和插入基中。
注意,这样并没有表示所有的环。只是说找出了所有需要我们需要的环。
最后的问题就是求
P10682 [COTS 2024] 奇偶南瓜 Tikvani
和上面的非常像,但是是对于所有路径,所以首先先每个点跑一颗生成树。这样就搞出所有的环了。(注意本来环的数量是指数级别)
现在相当于是让每个环异或和都是 0。
我们可以记录上 dfs 树中每个环的元素下标,标记这些环。然后就是要计数。
结论:满足异或方程的解个数为
, 为其线性基的大小(或者矩阵的秩)。
P4839 P 哥的桶
单点插入;查询区间最大异或和。
。
感觉有离线做法。但是我们可以线段树维护线性基。唯一的问题:线性基怎么合并。
非常简单,插入其中一个基的所有基底即可。复杂度是平方的。
所以整体复杂度 3log。
CF1100F Ivan and Burgers
上一题的加强版。只查询区间最大异或和。
。
线段树死亡。可以持久化吗?让我研究一下,主要是差分结构怎么搞。
考虑时间轴。现在相当于是要求我们基底的下标都尽可能靠右。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具