题解:AcWing 239 奇偶游戏

发布时间:2026/10/27 13:38:24

题解:AcWing 239 奇偶游戏 本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】AcWing239. 奇偶游戏 - AcWing题库【题目描述】小A AA和小B BB在玩一个游戏。首先小A AA写了一个由0 00和1 11组成的序列S SS长度为N NN。然后小B BB向小A AA提出了M MM个问题。在每个问题中小B BB指定两个数l ll和r rr小A AA回答S [ l ∼ r ] S[l∼r]S[l∼r]中有奇数个1 11还是偶数个1 11。机智的小B BB发现小A AA有可能在撒谎。例如小A AA曾经回答过S [ 1 ∼ 3 ] S[1∼3]S[1∼3]中有奇数个1 11S [ 4 ∼ 6 ] S[4∼6]S[4∼6]中有偶数个1 11现在又回答S [ 1 ∼ 6 ] S[1∼6]S[1∼6]中有偶数个1 11显然这是自相矛盾的。请你帮助小B BB检查这M MM个答案并指出在至少多少个回答之后可以确定小A AA一定在撒谎。即求出一个最小的k kk使得01 0101序列S SS满足第1 ∼ k 1∼k1∼k个回答但不满足第1 ∼ k 1 1∼k11∼k1个回答。【输入】第一行包含一个整数N NN表示01 0101序列长度。第二行包含一个整数M MM表示问题数量。接下来M MM行每行包含一组问答两个整数l ll和r rr以及回答even或odd用以描述S [ l ∼ r ] S[l∼r]S[l∼r]中有偶数个1 11还是奇数个1 11。【输出】输出一个整数k kk表示01 0101序列满足第1 ∼ k 1∼k1∼k个回答但不满足第1 ∼ k 1 1∼k11∼k1个回答如果01 0101序列满足所有回答则输出问题总数量。【输入样例】10 5 1 2 even 3 4 odd 5 6 even 1 6 even 7 10 odd【输出样例】3【核心思想】问题分析给定长度为N NN的 01 序列和M MM个区间奇偶性回答区间[ l , r ] [l, r][l,r]中 1 的个数为偶数或奇数求前多少个回答自洽第几个回答开始出现矛盾。这是一个带权并查集问题关键在于将区间奇偶性约束转化为前缀和节点之间的异或关系。算法选择带权并查集Extended Union-Find维护每个节点到根节点的异或值奇偶性支持O ( α ( n ) ) O(\alpha(n))O(α(n))的合并与查询前缀和转化区间[ l , r ] [l, r][l,r]中 1 的个数的奇偶性等价于前缀和s u m [ r ] sum[r]sum[r]与s u m [ l − 1 ] sum[l-1]sum[l−1]的奇偶性差异即s u m [ r ] ⊕ s u m [ l − 1 ] t sum[r] \oplus sum[l-1] tsum[r]⊕sum[l−1]t离散化Hash/Map下标范围大需要映射为连续编号关键步骤前缀和建模设s u m [ i ] sum[i]sum[i]为前i ii项中 1 的个数的前缀和则区间[ l , r ] [l, r][l,r]中 1 的个数的奇偶性为s u m [ r ] ⊕ s u m [ l − 1 ] sum[r] \oplus sum[l-1]sum[r]⊕sum[l−1]离散化使用unordered_map将l − 1 l-1l−1和r rr映射为连续编号因为l − 1 l-1l−1和r rr的范围可能达到10 9 10^9109初始化带权并查集p[i] id[i] 0$每个节点独立到自身的异或值为 0带权查找路径压缩递归查找根节点u find(p[x])更新d[x] ^ d[p[x]]使d[x]表示x xx到根节点的异或值p[x] u路径压缩处理每个回答( a , b , t ) (a, b, t)(a,b,t)其中a l − 1 , b r a l-1, b ral−1,br若a aa和b bb在同一集合检查d[a] ^ d[b] t若不等则前i − 1 i-1i−1个回答自洽第i ii个矛盾记录答案并退出若不在同一集合合并p[pa] pb设置权值d[pa] d[a] ^ d[b] ^ t保证合并后a aa到b bb的异或值为t tt时间/空间复杂度时间复杂度O ( M ⋅ α ( N ) ) O(M \cdot \alpha(N))O(M⋅α(N))其中α \alphaα为阿克曼函数反函数近似常数。每次查找或合并操作均摊O ( α ( N ) ) O(\alpha(N))O(α(N))空间复杂度O ( N ) O(N)O(N)并查集父节点数组、权值数组和离散化映射表带权并查集的核心思想异或关系传递通过维护每个节点到根节点的异或值快速查询任意两节点间的奇偶性关系路径压缩更新权值在路径压缩时利用异或的传递性d[x] ^ d[p[x]]更新到根的距离合并时设置权值合并两个集合时通过d[pa] d[a] ^ d[b] ^ t保证新集合内所有异或关系一致前缀和降维将区间问题转化为两个端点的前缀和关系是处理区间奇偶性/异或约束的经典技巧适用于带奇偶性约束的连通性判断、异或方程组、博弈公平性问题【算法标签】#并查集【代码详解】#includebits/stdc.husingnamespacestd;constintN200005;// 最大节点数离散化后最多 2*M5 个节点intn,m;// n: 序列长度输入值但随后被重置用于离散化计数, m: 问题数量intp[N],d[N];// p: 并查集父节点数组; d[x]: 节点 x 到父节点路径上的奇偶性异或值unordered_mapint,intS;// 离散化映射原始下标 - 连续编号// 离散化将原始下标映射为连续编号从1开始intget(intx){if(S.count(x)0)S[x]n;// 若该值未出现过分配新编号n 从0递增returnS[x];// 返回该下标对应的编号}// 带权并查集查找路径压缩同时维护到根节点的奇偶性关系intfind(intx){if(p[x]!x){intufind(p[x]);// 递归查找根节点d[x]^d[p[x]];// 更新 x 到根节点的奇偶性d[x] d[x] ^ d[父节点]p[x]u;// 路径压缩将 x 直接指向根节点}returnp[x];// 返回根节点}intmain(){cinnm;// 读入序列长度 N 和问题数量 Mfor(inti1;iN;i)p[i]i;// 初始化并查集每个节点自成一个集合注意用输入的N而非nn0;// 重置 n用于离散化计数intresm;// 默认答案若所有回答都自洽则输出 mfor(inti1;im;i){inta,b;string type;cinabtype;// 读入区间 [a, b] 和回答类型aget(a-1),bget(b);// 离散化将前缀和节点 (a-1) 和 b 映射为编号intt0;// t 0 表示 even偶数个1t 1 表示 odd奇数个1if(typeodd)t1;intpafind(a),pbfind(b);// 查找 a 和 b 的根节点if(papb)// 若 a 和 b 已在同一集合{// 检查奇偶性是否矛盾d[a]^d[b] 表示区间 [a,b] 中1的个数的奇偶性if((d[a]^d[b])!t){resi-1;// 前 i-1 个回答自洽第 i 个回答导致矛盾break;// 找到矛盾提前退出}}else// 若 a 和 b 不在同一集合合并{p[pa]pb;// 将 pa 的根指向 pb 的根// 设置 pa 到 pb 的奇偶性关系d[pa] d[a] ^ d[b] ^ t// 保证合并后d[a] ^ d[b] t即区间 [a,b] 中1的个数奇偶性为 td[pa]d[a]^d[b]^t;}}coutresendl;// 输出最多自洽的回答数量return0;}【运行结果】10 5 1 2 even 3 4 odd 5 6 even 1 6 even 7 10 odd 3
延伸阅读

更多相关文章

2026/10/26 5:24:32

2023职场必备技能:数字化工具与AI协同实战指南

1. 项目概述 "火爆全网的Skills"这个标题背后反映的是当前职场和生活中快速迭代的核心能力需求。作为从业十余年的职业发展顾问,我发现每隔3-5年就会出现一批新的"网红技能",它们往往与技术创新、社会变迁密切相关。2023年最值得关注…

2026/10/27 2:02:32

MinerU2.5:多模态大模型在文档解析中的突破与应用

1. MinerU2.5:文档解析领域的多模态大模型新标杆当我在处理一批跨国企业的混合格式文档时,传统OCR工具在复杂表格和多语言文本上的表现令人抓狂——直到遇到MinerU2.5。这个拥有1.2B参数的开源模型在GitHub上斩获46.1k星,其最新发布的2.5-Pro…

2026/10/24 4:44:52

古迪植物大战僵尸积木机关设计解析与拼搭体验测评

最近在玩具圈里,古迪积木的植物大战僵尸系列可以说是相当火爆。作为一个积木爱好者和植物大战僵尸的老玩家,我入手了这款60043机关场景套装第2弹。说实话,刚开始看到"机关场景"四个字时,我还在想是不是又是那种简单的推…

2026/10/27 13:36:46

DQN算法在机器人避障控制中的实践与优化

1. 项目概述:DQN在避障控制中的应用探索 深度Q网络(DQN)作为强化学习领域的里程碑式算法,正在机器人自主导航领域掀起一场革命。这个项目通过PyTorch框架实现了三种不同版本的DQN算法来解决避障控制问题——基础DQN、带优先级采样…

2026/10/27 13:36:46

Docker源码构建Airflow镜像与DAG调度链路验证

做数据管道的人大概都遇到过这种时刻:某个 DAG 在线上跑出来的行为和文档描述对不上,翻 release notes 没写,翻 issue 列表只有一句“主干已修复”。这时候官方镜像就成了一个黑盒——它是打包好的发布版,你能读它的源码&#xff…

2026/10/27 13:36:46

AI Agent技能开发:从基础到企业级部署全解析

1. AI Agent技能开发全景解读 当我在2020年第一次尝试开发对话型AI技能时,花了整整两周才让系统正确理解"明天北京天气怎么样"这样的基础查询。如今借助现代Agent开发框架,同样功能只需不到20行代码就能实现——这就是AI Agent技能开发领域的技…

2026/10/27 13:36:46

拆解感知机模型:超平面、损失函数与权重更新实战

1. 都这么多年了,为什么我还要回头啃感知机模型如果你刚开始接触机器学习,大概率会在第三天就遇到这个名字——感知机模型。它出现在几乎所有教材的第一章,却又常常被一句"它是神经网络的基础"草草带过,然后就跳到支持向量机和深度学习去了。我带过几批刚入行的同学,…

2026/10/27 13:36:46

DualBEV双视角变换:统一前向与后向投影的BEV感知实践

1. 先把痛点说明白:双视角变换到底在争什么 BEV 感知这条线上,多相机图像怎么变到鸟瞰图,十年下来其实只沉淀了两条路:一条从像素往地面"抬",一条从地面网格往图像"捞"。前者以深度分布加几何投影…

2026/10/27 13:31:45

Ponytail插件指南:高效网页元素定位与DOM调试利器

1. 为什么一个叫“ponytail”的插件值得你关注 第一次看到“ponytail”这个名字的时候,我差点以为是个发型教程。但点进去之后才发现,这是一个相当实用的浏览器插件,主要解决的是前端开发和日常网页浏览中的一个老大难问题——页面元素定位和…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑