常见算法题型之数论进阶:线性基
常见算法题型之数论进阶线性基线性基是算法竞赛中专门处理子集异或和问题的核心数据结构它通过构造一组线性无关的基底将原集合所有可能的异或组合压缩到与二进制位数同级的空间中能在O(log⁡V)O(\log V)O(logV)的时间内完成各类查询是处理异或问题的必备工具。一、基础概念与性质1. 异或运算核心性质线性基的所有操作都基于异或的基本性质交换律a⊕bb⊕aa \oplus b b \oplus aa⊕bb⊕a结合律(a⊕b)⊕ca⊕(b⊕c)(a \oplus b) \oplus c a \oplus (b \oplus c)(a⊕b)⊕ca⊕(b⊕c)自反性a⊕a0a \oplus a 0a⊕a0a⊕0aa \oplus 0 aa⊕0a关键推论若a⊕bca \oplus b ca⊕bc则等价于ab⊕ca b \oplus cab⊕c、ba⊕cb a \oplus cba⊕c2. 线性基的定义对于一个非负整数集合它的线性基BBB是满足以下条件的特殊数集张成性原集合的任意一个子集的异或和都可以由BBB中若干个数异或得到线性无关性BBB的任意非空子集的异或和都不为 0即没有冗余元素规范性BBB中第jjj个元素若存在的二进制最高位为第jjj位且其他元素的第jjj位均为 0。3. 核心性质线性基的大小不超过数值的二进制位数int范围最多 32 个long long最多 64 个线性基不唯一但基底数量固定能表示的异或和集合完全一致线性基本身无法直接表示 0若原集合存在非空子集异或和为 0插入过程中会出现数值被消为 0 的情况。二、线性基的构造插入操作1. 构造原理逐个将原集合的数插入线性基从最高位向最低位处理若当前位已有基底则用基底消去当前数的这一位直到数变为 0可被已有基底表示或找到空位完成插入。2. 分步插入流程设线性基数组为b[]b[j]表示最高位为第jjj位的基底当前插入数为xxx从最高位如 31 位到 0 位倒序遍历二进制位若xxx的第jjj位为 0直接跳过若b[j]为空值为 0则令b[j] x插入成功结束流程若b[j]已存在则令x ^ b[j]消去xxx的第jjj位继续循环若最终xxx变为 0说明该数可被已有线性基表示插入失败。3. 插入代码片段int 版intb[32];// 存储线性基b[j]对应最高位为j的基底// 向线性基插入一个数xvoidinsert(intx){for(intj31;j0;j--){if((xj)1){// 当前位为1if(!b[j]){// 该位无基底直接插入b[j]x;break;}x^b[j];// 用基底消去当前位}}// 若x最终为0说明原集合可异或出0}三、核心查询操作1. 判定数值能否被表示用途判断一个数valvalval是否等于原集合某个子集的异或和。方法模拟插入过程用valvalval逐位消去基底若最终结果为 0 则可以表示否则不能。boolcheck(intval){for(intj31;j0;j--){if((valj)1){if(!b[j])returnfalse;// 无对应基底无法表示val^b[j];}}returnval0;}2. 求最大异或和用途求原集合所有子集异或和的最大值。方法贪心思想从高位到低位遍历若异或当前基底后结果变大则选择该基底。intquery_max(){intres0;for(intj31;j0;j--){if(b[j](res^b[j])res){res^b[j];}}returnres;}3. 求最小非零异或和用途求原集合所有非空子集异或和的最小值。方法线性基中最低位的非零基底就是答案。intquery_min(){for(intj0;j31;j){if(b[j])returnb[j];}return0;// 空集情况根据题意调整}4. 补充能否异或出 0线性基本身不能表示 0需额外标记若插入过程中任意一个数被消为 0则原集合存在非空子集异或和为 0。四、模板例题精讲题目链接https://ac.nowcoder.com/acm/problem/179681. 题意重述给定nnn个数QQQ次询问每次给出 (x,y)问能否选择若干个数与xxx异或任意多次最终得到yyy。2. 思路转化根据异或自反性题目等价于是否存在子集SSS满足x⊕(S的异或和)yx \oplus (\text{S的异或和}) yx⊕(S的异或和)y两边同时异或xxx得到S的异或和x⊕y\text{S的异或和} x \oplus yS的异或和x⊕y问题直接转化为判断x⊕yx \oplus yx⊕y能否被原集合的子集异或表示这正是线性基的基础查询场景。3. 代码详解对应你提供的标准正解代码核心逻辑拆解如下#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(0);intn,q;cinn;vectorinta(n);for(inti0;in;i)cina[i];vectorintb(32);// 线性基主体// w、id数组用于记录构造方案本题不需要输出方案可忽略vectorintw(32),id(32);// 构造线性基for(inti0;in;i){intxa[i],tmp0;for(intj31;j0;j--){if((xj)1){if(!b[j]){b[j]x;id[j]i;w[j]tmp^(1j);break;}x^b[j];tmp^w[j];}}}cinq;while(q--){intx,y;cinxy;inttagx^y;// 核心转化判断tag能否被表示if(!tag){// tag为0无需选数直接成立coutYES\n;continue;}boolfailfalse;inttmp0;for(intj31;j0;j--){if((tagj)1){if(!b[j]){// 无对应基底无法表示failtrue;break;}tag^b[j];tmp^w[j];}}if(fail)coutNO\n;elsecoutYES\n;}return0;}4. 复杂度分析构造线性基O(n×log⁡V)O(n \times \log V)O(n×logV)VVV为数值最大值int 下log⁡V32\log V 32logV32单次查询O(log⁡V)O(\log V)O(logV)总复杂度O((nQ)log⁡V)O((nQ)\log V)O((nQ)logV)在n,Q≤105n,Q \le 10^5n,Q≤105的数据下完全满足时限要求。五、完整通用模板long long 版覆盖绝大多数线性基题型可直接复用#includebits/stdc.husingnamespacestd;typedeflonglongll;constintMAX_BIT63;// long long 范围 0~62位ll basis[MAX_BIT];boolhas_zero;// 是否能异或出0// 插入数xvoidinsert(ll x){for(intiMAX_BIT-1;i0;i--){if((xi)1){if(!basis[i]){basis[i]x;return;}x^basis[i];}}has_zerotrue;// x被消为0可异或出0}// 判断x能否被表示boolcheck(ll x){for(intiMAX_BIT-1;i0;i--){if((xi)1){if(!basis[i])returnfalse;x^basis[i];}}returntrue;}// 查询最大异或和llquery_max(){ll res0;for(intiMAX_BIT-1;i0;i--){if(basis[i](res^basis[i])res){res^basis[i];}}returnres;}// 查询最小非零异或和llquery_min(){if(has_zero)return0;for(inti0;iMAX_BIT;i){if(basis[i])returnbasis[i];}return0;}六、常见应用场景子集异或和的存在性、最值、第k小问题树上路径异或和结合前缀异或转化为两点异或博弈论中的 Nim 游戏变种、公平组合游戏集合异或合并、带删除的线性基离线处理等进阶问题。

相关新闻

Iwara下载工具终极指南:3种方法轻松批量下载Iwara视频

Iwara下载工具终极指南:3种方法轻松批量下载Iwara视频

Iwara下载工具终极指南:3种方法轻松批量下载Iwara视频 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 想要保存Iwara平台上的精彩视频内容吗?寻找一款高…

2026/8/4 7:54:15 阅读更多 →
7个步骤掌握NVIDIA驱动隐藏参数调校:深度解析NVIDIA Profile Inspector

7个步骤掌握NVIDIA驱动隐藏参数调校:深度解析NVIDIA Profile Inspector

7个步骤掌握NVIDIA驱动隐藏参数调校:深度解析NVIDIA Profile Inspector 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款专业级显卡优化工具,专为…

2026/8/4 7:54:14 阅读更多 →
Python+Django构建高效网吧会员管理系统实战

Python+Django构建高效网吧会员管理系统实战

1. 网吧管理系统项目概述 网吧会员上机管理系统是典型的B/S架构商业应用,采用PythonDjango技术栈开发(项目代号eas18u43)。这个系统要解决的核心痛点是传统网吧手工登记方式的低效与混乱——我记得2010年在北京某网吧亲眼见过前台用三个Excel…

2026/8/4 7:53:14 阅读更多 →

最新新闻

微信小程序健身房预约系统开发全解析

微信小程序健身房预约系统开发全解析

1. 项目概述:微信小程序健身房预约系统全解析 这套健身房预约系统是我为本地连锁健身中心开发的线上解决方案,上线三个月内帮助客户将预约率提升47%,会员留存率提高32%。系统采用微信小程序作为前端入口,后端基于Node.jsMySQL架构…

2026/8/4 16:35:32 阅读更多 →
让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣

让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣

让经典游戏重获新生:用IPXWrapper在现代Windows上重温局域网联机乐趣 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还记得那些在网吧里和朋友一起玩《红色警戒2》、《魔兽争霸2》、《暗黑破坏神》的美好时光吗&…

2026/8/4 16:35:32 阅读更多 →
51单片机电子琴与音乐播放器系统:从定时器原理到Proteus仿真的完整实现

51单片机电子琴与音乐播放器系统:从定时器原理到Proteus仿真的完整实现

如果你正在学习51单片机,想找一个既能巩固基础知识、又能做出有趣成果的课程设计项目,那么基于51单片机的电子琴/音乐播放器系统,可能是你目前能找到的最佳选择之一。 这个项目听起来简单,但真正动手时会发现,它几乎覆…

2026/8/4 16:35:32 阅读更多 →
OpenClaw AI自动化工具极简部署指南

OpenClaw AI自动化工具极简部署指南

1. OpenClaw极简部署概述OpenClaw作为一款新兴的AI自动化工具,正在技术社区引发广泛关注。它最吸引人的特点在于能够通过简单的部署流程,快速搭建起一个功能完善的AI助手系统。我在实际部署过程中发现,相比其他同类工具,OpenClaw的…

2026/8/4 16:35:32 阅读更多 →
Agentic AI 团队接入后效率反而降了?问题不在工具,在自主性边界

Agentic AI 团队接入后效率反而降了?问题不在工具,在自主性边界

这篇我按“先跑起来、再讲取舍”的方式写《Agentic AI真能提效吗?先看流程里最慢的那一步》。概念会讲,但重点放在代码怎么组织、哪里容易踩坑。 摘要 摘要:最近把 Claude Code 接进团队工作流,代码产出量确实上去了&#xff0c…

2026/8/4 16:35:32 阅读更多 →
NoFences桌面分区管理工具:5分钟打造整洁高效的Windows工作空间终极指南

NoFences桌面分区管理工具:5分钟打造整洁高效的Windows工作空间终极指南

NoFences桌面分区管理工具:5分钟打造整洁高效的Windows工作空间终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱的Windows桌面而烦恼吗&#x…

2026/8/4 16:34:32 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →