尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P14359 [CSP-J 2025] 异或和 / xor(官方数据)

P14359 [CSP-J 2025] 异或和 / xor(官方数据)
📅 发布时间:2026/6/21 14:32:09

P14359 [CSP-J 2025] 异或和 / xor(官方数据)

错误思路

1. 暴力___概不多说,暴力出奇迹

直接枚举所有可能的子数组,计算每个子数组的异或和并判断是否等于k。但数组长度最大可达5×10⁵,枚举所有子数组的时间复杂度为O(n²),会超时,无法通过大数据。

2. DP___结论,特殊性质和重要

尝试设计动态规划状态记录前i个元素中合法子数组的个数,但异或和的无后效性难以直接体现,状态转移方程难以设计,且无法高效处理“非重叠”要求,最终效果不佳。

发现

异或运算存在关键性质,是解题的核心:

  • 当a^b=c时,可推导得出:
    1. a^c=b(用c异或等式两边,抵消b)
    2. b^c=a(用c异或等式两边,抵消a)

结合前缀异或和的定义(s[i] = a[1]a[2]…^a[i]),子数组[l, r]的异或和为s[r]^s[l-1](异或的“抵消性”:相同元素异或结果为0)。因此,要找异或和为k的子数组[l, r],等价于找s[l-1] = s[r]k(由s[r]s[l-1] = k推导而来)。

思考

基于上述性质,用前缀和+集合的思路解题:

  1. 维护一个集合st,记录已出现过的前缀异或和,用于快速查询是否存在s[l-1] = s[r]^k;
  2. 初始时集合加入s[0] = 0(空数组的异或和),适配子数组从第一个元素开始的情况;
  3. 遍历数组计算前缀和s[i],若s[i]^k在集合中存在,说明找到合法子数组,答案加1;
  4. 由于要求子数组非重叠,找到合法子数组后需重置状态:将当前前缀和s[i]设为0(视为新数组起点),清空集合(重新记录新数组的前缀和);
  5. 每次遍历后将当前前缀和加入集合,供后续元素查询。

代码

#include<bits/stdc++.h>
using namespace std;// 全局变量说明:
// st:存储已出现的前缀异或和,初始加入s[0]=0(空数组异或和)
// n:数组长度,k:目标异或和
// a[]:原始数组,s[]:前缀异或和数组
// ans:统计合法非重叠子数组个数
set<int> st = {0};
int n, k;
const int MAXN = 500005;  // 适配题目n≤5×10^5的数据范围
int a[MAXN], s[MAXN], ans = 0;int main() {// 输入数组长度和目标异或和cin >> n >> k;for (int i = 1; i <= n; i++) {cin >> a[i];// 计算前缀异或和:s[i] = 前i个元素的异或和s[i] = s[i - 1] ^ a[i];// 检查是否存在s[l-1] = s[i]^k,即是否有合法子数组[l, i]if (st.find(s[i] ^ k) != st.end()) {ans++;  // 找到合法子数组,答案加1s[i] = 0;  // 重置前缀和,视为新数组起点(保证非重叠)st.clear();  // 清空集合,重新记录新数组的前缀和}// 将当前前缀和加入集合,供后续元素查询st.insert(s[i]);}// 输出合法子数组个数cout << ans << '\n';return 0;
}

补充说明

  1. 时间复杂度:每个元素的插入和查询操作都是O(log m)(m为集合中元素个数,重置后m最多为当前子数组长度),整体时间复杂度接近O(n log n),可高效处理5×10⁵规模的数据;
  2. 重置机制的必要性:若不重置,可能会找到包含已统计子数组的重叠区间,违反“非重叠”隐含要求(该逻辑是通过官方数据的关键);
  3. 初始集合初始化:st={0}是为了处理“子数组从第一个元素开始”的情况,例如当s[i]=k时,s[i]^k=0,集合中存在0,即可统计该子数组。

相关新闻

  • 实现AI和BI整合的初步思路和探索
  • 对长度为 n 的数组 arr,调用 `merge_sort(a, 0, n-1)`,在排序过程中,`merge` 函数的递归调用次数大约是多少?
  • 解析SP3D VUE和PDMS RVM文件-PlantAssistant

最新新闻

  • COM3D2 MaidFiddler 实时女仆编辑器:从入门到精通的完整指南
  • 去屑止痒洗发水哪个牌子好用?2026最新测评五款公认有效去屑洗发水 - 新闻快传
  • 嵌入式实时调试利器:PC Master在电机控制中的可视化调参实战
  • 无传感器BLDC电机控制实战:从反电动势过零点检测到系统移植调试
  • systemctl失效原因与systemd服务管理核心原理
  • 用户口碑佳的AI写作辅助平台综合榜(2026 最新盘点)

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号