当前位置: 首页 > article >正文

蓝桥杯2023年第十四届省赛真题-异或和之差

题目来自DOTCPP:

思路:

什么是异或和?

①题目要求我们选择两个不相交的子段,我们可以枚举一个分界线i,子段1在 i 的左边, 子段2在 i 的右边,分别找到子段1和子段2的最大值、最小值。

②怎么确定这两个子段呢?根据: A^B=C --> A^C=B-->B^C=A 。

对于 i 左边的子段,我们是从前往后枚举的,因此可以先求出每个点的前缀异或和 ls[i],ls[i]表示的是从0-i的子段的前缀异或和,我们在找到和 ls[i] 的最大异或和 ls[j],ls[j]表示的是从0-j的前缀异或和,根据上面的原理,我们可以知道 0-i 这一段的最大异或和就是 i-j,我们可以把这个当前最大子段异或和存到 lmax[i], 在和后面的比较。同理,如果我们要找的是和 ls[i] 异或的最小值 ls[k],ls[k] 表示的是从 0-k 的前缀异或和,那么 0-i 这一段的最小异或和就是 k-i,将这一段的异或和存入 lmin[i],和后面比较是否是最小值。
对于 i 右边的子段,我们是从后往前枚举的,因此可以求出每个点的后缀异或和 rs[i],它表示 i-n 子段的后缀异或和。同样的,我们找到 rs[i] 的最大异或和 rs[j],那么 i-n 这个子段的最大异或和就是 i-j,将它存入到 rmax[i]。再找到 rs[i] 的最小异或和 rs[k],i-n 这一段的最小异或和就是 i-k,将它存入到 rmin[i]。

③如何找到前缀异或和 ls[i] 的最小异或和、最大异或和?不能直接将所有数存入字典树中,我们要存入的是前缀异或和,不能超过当前要找的这一段前缀异或和,然后在字典树中查询,我们要找的是最大值,就找和ls[i]相反的数。如果要找的是最小值,我们就要找和 ls[i] 相同的数字。

④最后,遍历一下,有两种情况:max(左边子段最大值-右边子段最小值,右边子段最大值-左边子段最小值)。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+20;int n;
int arr[N];
int ls[N], rs[N]; //前缀异或和 后缀异或和
//第一个子段存到lch,第二个子段存到rch
//树上存的是这个点的前缀异或和、后缀异或和
int idx, lch[N*31][2], rch[N*31][2];//节点编号 字典树 
//最小值,最大值
int lmax[N], lmin[N], rmax[N], rmin[N];//将x插入到字典树中
void add(int x, int ch[][2]){int p = 0;for(int i = 30; i >= 0; i--){int j = x>>i & 1;if(!ch[p][j]) ch[p][j] = ++idx;p = ch[p][j];}
}//查找和x异或最大值 在树上找和他不相同的数
int queryMax(int x,int ch[][2]){int p = 0, res = 0;for(int i = 30; i >= 0; i--){int j = x >> i & 1;if(ch[p][!j]){res += 1 << i;p = ch[p][!j];}else p = ch[p][j];}return res;
}//查找和x异或最小值 在树上要找和它相同的数
int queryMin(int x, int ch[][2]){int p = 0, res = 0;for(int i = 30; i >= 0; i--){int j = x>>i & 1;//如果有,异或后为0,不用加到res,反之,则要加上。if(ch[p][j]) p = ch[p][j];else{p = ch[p][!j];res += 1 << i;}}return res;
}signed main(){cin >> n;for(int i =1; i <= n; i++) cin >> arr[i];//初始化memset(lmin, N, sizeof lmin);memset(rmin, N, sizeof rmin);//找到左边最大值、左边最小值//树上存的是这个点的前缀异或和add(0, lch);for(int i = 1; i <= n; i++){ls[i] = ls[i-1] ^ arr[i];lmax[i] = max(lmax[i-1], queryMax(ls[i], lch));lmin[i] = min(lmin[i-1], queryMin(ls[i], lch));//往树上添加这个点前缀异或和add(ls[i], lch);}//找到右边最大值add(0, rch);for(int i = n; i >= 1; i--){rs[i] = rs[i+1] ^ arr[i];rmax[i] = max(rmax[i+1], queryMax(rs[i], rch));rmin[i] = min(rmin[i+1], queryMin(rs[i], rch));add(rs[i], rch);}//枚举分界线i 找到差值最大值int ans = 0;for(int i = 1; i < n; i++){//两种情况 左边最大值-右边最小值//右边最大值-左边最小值ans = max(ans, max(lmax[i] - rmin[i], rmax[i] - lmin[i]));}cout << ans << endl;return 0;
}

相关文章:

蓝桥杯2023年第十四届省赛真题-异或和之差

题目来自DOTCPP&#xff1a; 思路&#xff1a; 什么是异或和&#xff1f; ①题目要求我们选择两个不相交的子段&#xff0c;我们可以枚举一个分界线i&#xff0c;子段1在 i 的左边&#xff0c; 子段2在 i 的右边&#xff0c;分别找到子段1和子段2的最大值、最小值。 ②怎么确…...

考研课程安排(自用)

文章目录 408数据结构&#xff08;王道&#xff09;计算机组成原理&#xff08;王道&#xff09;操作系统&#xff08;王道&#xff09;计算机网络&#xff08;湖科大版&#xff09; 数学一高等数学&#xff08;微积分&#xff09;线性代数和概率论 408 数据结构&#xff08;王…...

linux命令行工具进阶

文章目录 前言ssh免密登录&#xff0c;免密码登录&#xff0c;公私钥查看与修改IP地址临时修改永久修改 mount临时切换根文件系统永久切换根文件系统loop文件partedinitramfsuboot command line总结 前言 本文记录了一些不经常用到&#xff0c;但在某个时刻需要用到的一些指令…...

Linux系统管理实战:文件权限配置、用户组协作与日志处理全解析

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.html文件&#xff0c;name下面的index.html文件中包含当前主机的主机名&#xff0c;https目录下的index.html文件中包含当前主机的ip地址。 &#xff08;1&…...

[自动化] 【八爪鱼】使用八爪鱼实现CSDN文章自动阅读脚本

在CSDN上&#xff0c;文章的阅读量往往是衡量内容影响力的一个重要指标。为了测试自动化手段能否提高阅读数&#xff0c;我尝试使用网页自动化工具来模拟人工阅读某个ID的文章。 1. 网页自动化的常见方案 谈到网页自动化&#xff0c;Selenium 是一个最常见的选择。它可以通过…...

Go语言分布式锁实战:dlock助力构建高并发稳定系统

在构建分布式系统时&#xff0c;一个常见且棘手的问题便是资源竞争和数据一致性问题。分布式锁作为一种常用的解决方案&#xff0c;在多个进程或节点之间协调访问共享资源时显得尤为重要。今天&#xff0c;我们将介绍一款分布式锁库——dlock&#xff0c;并通过详细的使用示例带…...

如何提高G口服务器的安全性?

G口服务器可以支持千兆网络传输速度&#xff0c;能够为企业提供更快的数据处理能力和传输能力&#xff0c;随着网络流量的不断增长以及复杂计算任务的普及&#xff0c;企业对于网络带宽的要求也在相应提高&#xff0c;而G口服务器则可以降低网络的延迟度&#xff0c;大幅度提高…...

为没有CMake配置的第三方库添加CMake配置

1 编写CMakeLists.txt cmake_minimum_required(VERSION 3.15) #如果你第三方库和自己的库没有xxxConfig.cmake #请修改项目名称和命名空间&#xff08;一般不需要&#xff09; project("pthreads" LANGUAGES C CXX) set(KC_NAMESPACE "") #set(K…...

Linux驱动编程 - seq_open、single_open使用方法

目录 前言: 一、seq_xxx 1、seq_xxx 函数介绍 1.1 seq_open 1.2 seq_read 1.3 seq_lseek 1.4 seq_release 1.5 格式化输出函数 2、seq_open 实例 二、single_xxx 函数 1、single_xxx 函数介绍 1.1 single_open 1.2 single_start 1.3 single_next 1.4 single_stop…...

N列股票收盘价为起点的马科维茨(Markowitz)均值—方差理论

1. 数据准备与收益率计算 输入数据&#xff1a; 假设你有一个矩阵&#xff0c;每一列代表一只股票的历史收盘价序列。每一行对应一个时间点的收盘价。 计算收益率&#xff1a; 马科维茨理论要求使用资产的收益率而非价格。常用的收益率计算方法有对数收益率或简单收益率。 2.…...

【嵌入式学习2】函数

目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次&#xff0c;或者头文件嵌套包含&#xff1f; 命令行编译文件 头文件包含的…...

模式搜索+扩散模型:FlowMo重构图像Token化的技术革命

图像Token化作为现代生成式AI系统的核心技术&#xff0c;长期面临对抗性训练不稳定、潜在空间冗余等挑战。斯坦福大学李飞飞与吴佳俊团队提出的FlowMo&#xff08;Flow towards Modes&#xff09;创新性地融合模式搜索与扩散模型&#xff0c;在多个关键维度突破传统方法局限&am…...

mac brew 安装的php@7.4 打开redis扩展

1. 找到php7.4的pecl目录 一般在这个位置 cd /usr/local/Cellar/php7.4/7.4.33_8/pecl/20190902 ls 一下 有个 redis.so 于是 直接去php.ini编辑了 php.ini的路径 vim /usr/local/etc/php/7.4/php.ini 把938行添加进去 然后重启一下 php7.4 brew services restart ph…...

OSPF多区域通信

作业要求: 1、多区域0SPF area 0、area10、are20 2、AR5、AR6作为stub区&#xff0c;使用环回接口与Pc1进行通信 第一步&#xff1a;为各端口配置IP地址 AR1: <Huawei>sys [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 5.5.5.1 24 [Huawei-GigabitEther…...

C++模板编程与元编程面试题及参考答案(精选100道题)

目录 解释 C++ 模板的实例化过程,显式实例化与隐式实例化的区别 模板函数在不同翻译单元中的 ODR(单一定义规则)问题 模板参数推导失败的可能场景及解决方法 模板函数中 auto 返回类型的推导规则 如何限制模板函数仅接受特定类型的参数?(非 C++20 概念场景) 函数模板…...

括弧匹配检验(信息学奥赛一本通-1354)

【题目描述】 假设表达式中允许包含两种括号&#xff1a;圆括号和方括号&#xff0c;其嵌套的顺序随意&#xff0c;如&#xff08;&#xff3b; &#xff3d;&#xff08;&#xff09;&#xff09;或&#xff3b;&#xff08;&#xff3b; &#xff3d;&#xff3b; &#xff3…...

三、重学C++—C语言内存管理

上一章节&#xff1a; 二、重学C—C语言核心-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146191640?spm1001.2014.3001.5502 本章节代码&#xff1a; cPart2 CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/…...

算法题(105):小猫爬山

审题&#xff1a; 本题需要我们找出将n个小猫放在有限重的缆车上运下山所需的最小缆车数 时间复杂度分析&#xff1a;本题的数据量小于等于18&#xff0c;所以我们在做好剪枝的前提下可以使用深度优先搜索解题 思路&#xff1a; 方法一&#xff1a;dfs 搜索策略&#xff1a;将小…...

C语言-适配器模式详解与实践

文章目录 C语言适配器模式详解与实践1. 什么是适配器模式&#xff1f;2. 为什么需要适配器模式&#xff1f;3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (sensor_adapter.h)4.3 实现文件 (sensor_adapter.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特…...

线程的pthread_create、pthread_join、pthread_exit、pthread_detach函数

线程的创建&#xff08;pthread_create&#xff09; pthread_t tid;//本质是unsigned long类型&#xff0c;打印时得到的是该线程的虚拟地址int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *arg ); pthread_t *thre…...

测试专项4:AI算法测试在测试行业中,该如何定位自己自述

这岗位到底干啥的&#xff1f; 打个比方&#xff1a; 你就像AI模型的“质检员产品经理风险顾问”三合一。 质检员&#xff1a; 别人造了个AI模型&#xff08;比如人脸识别系统&#xff09;&#xff0c;你不能光看它实验室成绩好&#xff0c;得把它丢到现实里折腾&#xff1a;…...

QT-LINUX-Bluetooth蓝牙开发

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…...

【经验总结】AUTOSAR架构下NvMBlock无效问题分析

目录 前言 正文 1.问题描述 2.问题原因 3.深入分析 3.1NvM_InvalidateNvBlock分析 3.2NvBlock无效后NvM_ReadBlock行为分析 3.3NvBlock无效后NvM_WriteBlock行为分析 4.总结 前言 最近在做所有NvMBlock测试的时候,发现一个NvMBlock始终无法测试成功(写入Block值 --&…...

STM32 的tf卡驱动

基于STM32的TF卡驱动的基本实现步骤和相关代码示例,主要使用SPI接口来与TF卡进行通信。 硬件连接 将TF卡的SPI接口与STM32的SPI引脚连接,通常需要连接SCK(时钟)、MOSI(主出从入)、MISO(主入从出)和CS(片选)引脚。 软件实现 初始化SPI 配置SPI的工作模式、时钟频率…...

stress-ng命令详解

stress-ng 是一款功能强大的 Linux 系统压力测试工具&#xff0c;能够模拟多种复杂负载场景&#xff0c;覆盖 CPU、内存、磁盘 I/O、进程调度等核心资源&#xff0c;帮助开发者验证系统在高负载下的稳定性与性能表现。以下是其核心功能、参数解析及实战案例。 一、工具简介与安…...

【C语言系列】数据在内存中存储

数据在内存中存储 一、整数在内存中的存储二、大小端字节序和字节序判断2.1什么是大小端&#xff1f;2.2练习2.2.1练习12.2.2练习22.2.3练习32.2.4练习42.2.5练习52.2.6练习6 三、浮点数在内存中的存储3.1练习3.2浮点数的存储3.2.1 浮点数存的过程3.2.2 浮点数取的过程 3.3题目…...

【中文翻译】第12章-The Algorithmic Foundations of Differential Privacy

由于GitHub项目仅翻译到前5章&#xff0c;我们从第6章开始通过大语言模型翻译&#xff0c;并导出markdown格式。 大模型难免存在错漏&#xff0c;请读者指正。 教材原文地址&#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 12 其他模型 到目前为止&…...

图解模糊推理过程(超详细步骤)

我们前面已经讨论了三角形、梯形、高斯型、S型、Z型、Π型6种隶属函数&#xff0c;下一步进入模糊推理阶段。 有关六种隶属函数的特点在“Pi型隶属函数&#xff08;Π-shaped Membership Function&#xff09;的详细介绍及python示例”都有详细讲解&#xff1a;https://lzm07.b…...

datawhale组队学习-大语言模型-task5:主流模型架构及新型架构

目录 5.3 主流架构 5.3.1 编码器-解码器架构 5.3.2 因果解码器架构 5.3.3 前缀解码器架构 5.4 长上下文模型 5.4.1 扩展位置编码 5.4.2 调整上下文窗口 5.4.3 长文本数据 5.5 新型模型架构 5.5.1 参数化状态空间模型 5.5.2 状态空间模型变种 5.3 主流架构 在预训…...

为什么后端路由需要携带 /api 作为前缀?前端如何设置基础路径 /api?

一、为什么后端路由需要携带 /api 作为前缀&#xff1f; 1. 区分 API 端点与其他路由 在 Web 应用程序中&#xff0c;后端不仅需要处理 API 请求&#xff0c;还可能需要处理静态资源&#xff08;如 HTML、CSS、JS 文件&#xff09;或其他服务&#xff08;如 WebSocket&#x…...