题解:AcWing 239 奇偶游戏

发布时间:2026/9/11 22:02:10

题解: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/9/7 5:30:55

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

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

2026/9/7 10:19:33

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

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

2026/9/5 23:25:12

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

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

2026/9/11 22:33:44

Linux 磁盘管理:分区、文件系统、挂载与扩容

磁盘满、只读挂载、扩容后系统看不见空间,步骤要固定:分区 → 文件系统 → fstab/挂载 → 监控 inode 与只读原因。 源码锚点路径 / 手册作用man fdisk man parted分区man mkfs man fsck造/检文件系统man mount man findmnt挂载命名空间视图/etc/fstab持…

2026/9/11 22:33:44

Linux 网络配置:iproute2、DNS 与连通性排障

「有地址不能上网」按层拆:链路 → 地址 → 路由 → DNS → 防火墙 → 对端。工具以 ip/ss 为主。 源码锚点路径 / 手册作用man ip地址/路由/链路man ss套接字man resolvectlsystemd-resolved/etc/resolv.confDNS(可能被托管)调用链 #mermaid…

2026/9/11 22:33:44

用C++23重写RTOS内核:协程、类型安全与编译期配置的探索

1. 先问一句:RTOS 的内核,凭什么还是三十年前的写法 前阵子帮朋友调一块 GD32F103 的裸机项目,他在上面跑的 FreeRTOS,任务里一个状态机洋洋洒洒写了四个 switch-case 嵌套。我看了半天,说这状态机放在单片机里确实够用…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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