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

news/2025/11/9 20:44:29/文章来源:https://www.cnblogs.com/ImYourDad/p/19205245

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,即可统计该子数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现AI和BI整合的初步思路和探索

这些年AI火的一塌糊涂,很多行业和传统技术领域都在积极的跟其产生交集。 BI是一个20年前开始火起来的技术,跌跌荡荡这些年,如今虽然不是网红菜,但绝对是企业的必点菜。 AI的出现让很多东西跟人们越来越近,那么AI配…

试了下KenLM

〔图解N-gram语言模型的原理〕〔KenLM〕 先下载编译KenLMwget -O - https://kheafield.com/code/kenlm.tar.gz | tar xz # 7z最大压缩后 315Klibboost-program-options-dev libboost-system-dev libboost-thread-dev l…

从CPython底层解析:为何a=10 b=10复用对象,a=[] b=[]新建对象?

从CPython底层解析:为何a=10 b=10复用对象,a=[] b=[]新建对象? 用户的核心疑问本质是:CPython对“不可变对象(如int)”和“可变对象(如list)”采用了完全不同的“对象创建-复用策略”——前者通过“预缓存池”…

Netty线程模型:EventLoop机制与原理解析

目录1. Netty线程模型概述1.1 为什么需要特殊的线程模型?2. EventLoop核心机制2.1 EventLoop基本概念2.1.1. EventLoop执行引擎原理2.1.2. 核心执行逻辑实现2.2. Netty的线程模型实现2.2.1. 主从EventLoopGroup设计2.…

对长度为 n 的数组 arr,调用 `merge_sort(a, 0, n-1)`,在排序过程中,`merge` 函数的递归调用次数大约是多少?

归并排序(Merge Sort) 的标准 基于C++ 实现:对长度为 n 的数组 arr,调用 merge_sort(a, 0, n-1),在排序过程中,merge 函数的递归调用次数大约是多少?✅ 一、代码结构回顾 关键递归函数: void merge_sort(int a…

解析SP3D VUE和PDMS RVM文件-PlantAssistant

在PlantAssistant中增加视图相关设置选项,如设置是否显示坐标轴、视图方块、三维视图背景,可以设置背景颜色,还可以设置一张图片作为三维视图背景。引言 依托主流工厂设计软件数字化交付数据文件,AVEVA公司PDMS/E3…

古建筑学习

http://www.sihey.com/zsyl/pw/作者:太一吾鱼水 宣言:在此记录自己学习过程中的心得体会,同时积累经验,不断提高自己! 声明:博客写的比较乱,主要是自己看的。如果能对别人有帮助当然更好,不喜勿喷! …

VS Code 1.105正式发布: AI 新特性详解:7 大亮点全面提升智能开发体验 - 详解

VS Code 1.105正式发布: AI 新特性详解:7 大亮点全面提升智能开发体验 - 详解2025-11-09 20:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

20251109-3

经过今天晚上近两个小时的努力,终于初具雏形了!! 添加功能如下: 1.增加了计量分数,和金币的功能。 2.增加了属性加点功能。 3.增加了怪物的增长曲线。 4.增加了界面跳转和回合重置。 也能应该够格算一个纯前端的简…

kettle从入门到精通 第110课 ETL之kettle webspoon的两种部署方式docker+tomcat使用教程

大家好,经常有小伙伴私信我咨询webspoon的部署问题,今天周末抽点时间一起梳理学习下。 1、docker方式部署 1)docker方式部署可以参考我之前的文章【kettle从入门到精通 第四十八课 ETL之kettle webspoon】 2)有时候…

【达梦数据库】性能优化-转正官网

【达梦数据库】性能优化-转正官网一、前言 1.1 概述 性能优化是指在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。达梦数据库性能优化主要包含以下内容: @list l0:level1{ mso-level-…

Python中`a = 10`的6种读法对比:哪种最贴合名字-对象模型?

以下是针对a = 10语句设计的6种常见读法,结合Python名字-对象绑定模型(呼应前文《西游记》“符咒-山”比喻),通过列表对比各读法的优劣,最终明确适配Python认知的最优选择: Python中a = 10的6种读法对比:哪种最…

netgear r6220 路由器,刷openwrt后,体系备份还原

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

文字识别准确度

文字识别准确度coding: utf-8 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms from PIL import Image, Ima…

原生多模态AI架构:统一训练与跨模态推理的环境实现与性能优化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VBA之Word应用第四章第三节:段落集合Paragraphs对象的手段(一)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

日记?

还是写一写的好虽然叫日记但是并不是日日记,差不多就是有话就写没话不硬挤吧。 尽量避免写垃圾话(存疑)。 不喜欢流水账,流水账太无聊了,写流水账的就应该重修小学学位攻读废话博士。 2025.11.9 前几天因为心态彻…

2025校运会小记

2025 校运会小记 前言 update 2025.11.09 本来拖到这么久还没有开始写,大概是要咕咕掉了的。但是想到这个运动会还是太有意思了,所以写吧。这篇应该没有照片,因为懒得放,因为放照片是不是得把其他人(以及我自己?…

安卓项目调用摄像头或相机。调用不了相机解决方案

这里推荐两篇文章: https://blog.csdn.net/weixin_31569663/article/details/148461910 这个是介绍了如何声明和请求相机及存储权限,然后详细说明了使用Camera API的基本流程,包括启动预览、拍照及图片保存。之后,…

2025 年 11 月上海老房翻新装修公司推荐排行榜,毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/地中海风格/中式风格/全包装修/半包装修公司推荐

2025 年 11 月上海老房翻新装修公司推荐排行榜,毛胚房改造/局部翻新/设计施工/水电改造/现代简约/奶油风格/法式风格/地中海风格/中式风格/全包装修/半包装修公司推荐随着上海城市更新的持续推进,老房翻新与毛胚房改…