蓝桥杯刷题-15-异或和之和-拆位+贡献法⭐⭐(⊙o⊙)

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

在这里插入图片描述
题目描述
给定一个数组 Ai,分别求其每个子段的异或和,并求出它们的和。或者说,对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R ,求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到的结果加起来的值。

输入格式
输入的第一行包含一个整数 n 。
第二行包含 n 个整数 Ai ,相邻整数之间使用一个空格分隔。

在这里插入图片描述
在这里插入图片描述
⭐⭐
处理位运算的常用方法:拆位法
常用的思想:贡献法思想

010101100101
011010101010
101010101101
110101010101
110010101011
对于二进制位中的第i位:
如果这一位中1的个数是奇数,那么最后的结果中, 这一位就是1.如果是偶数,在结果中,这一位就是0.
在这里插入图片描述
在这里插入图片描述

bit=(a[j]>>i)&1
//这段代码是在C语言中常见的位操作语句,它主要用于提取一个整数数组a中第j个元素的第i位的值
a[j]: 这是数组a中的第j个元素。在这里,a是一个整数数组,j是数组的索引。a[j] >> i: 这是将数组元素a[j]右移i位。这里的>>是右移位操作符,它将a[j]的二进制表示向右移动i位。例如,如果a[j]1101,而i是2,那么结果将是0011(a[j] >> i) & 1: 这一步是将右移后的结果与1进行按位与操作。这里的&是按位与操作符,它将两个数的对应位进行与操作。因为1在二进制中是0001,所以此操作会保留右移后结果的最低位。这样就可以提取出a[j]右移i位后的最低位,即第i位的值。bit: 这是一个变量,用于存储提取出的第i位的值。如果该位为1,则bit为1;如果该位为0,则bit为0。因此,整个表达式(a[j]>>i)&1的目的是提取出数组a中第j个元素的第i位的值,并将其存储在变量bit中。
ans+=(1<<i)*n0;
//这段代码是在C语言中常见的位操作语句,它执行的是一个位运算操作
1 << i: 这是将数字1左移i位的操作。这里的<<是左移位操作符,它将1的二进制表示向左移动i位。例如,如果i是2,那么结果将是100(1 << i) * n0: 这是将左移后的结果乘以变量n0的值。这里的*是乘法操作符。因为左移后的结果实际上是2的i次幂,所以这一步相当于将2的i次幂乘以n0。ans += (1 << i) * n0: 这是将上一步得到的结果加到变量ans上。这里的+=是加法赋值操作符,它将右侧表达式的结果加到左侧的变量上。因此,整个表达式ans += (1 << i) * n0的目的是将2的i次幂(即1左移i位)乘以n0的值,并将结果加到变量ans上。

代码:

#include <iostream>
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];void solve()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}int ans=0;for(int i=20;i>=0;i--){int s=0;//前缀和int n0=1,n1=0;//偶数个数和奇数个数for(int j=0;j<n;j++){int bit=(a[j]>>i)&1;//从高到底取s+=bit;//前缀和是奇数,合法区间个数=1+前面偶数的个数if(s%2){ans+=(1<<i)*n0;n1++;}else{ans+=(1<<i)*n1;n0++;}}}cout<<ans<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;//cin>>t;while(t--)solve();
}

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

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

相关文章

MySQL5.7导入MySQL8.0以上版本的几种错误

【错误原因1】/!40000 DROP DATABASE IF EXISTS springbootra863/; 【解决办法】给这一行删了

阿里通义千问开源 320 亿参数模型;文字和音频自动翻译成手语Hand Talk拉近人与人的距离

✨ 1: Qwen1.5-32B Qwen1.5-32B是Qwen1.5系列中性能与效率兼顾的最新语言模型&#xff0c;内存占用低&#xff0c;运行速度快。 Qwen1.5-32B是Qwen1.5语言模型系列的最新成员&#xff0c;这个模型是基于先进的技术研发的&#xff0c;旨在提供一种既高效又经济的AI语言理解和生…

CAXA实体设计教程 网盘下载

CAXA实体设计教程 网盘下载 https://pan.baidu.com/s/1tOIoWmAwl8Wepu7iFsKB_A?pwd2024 章节&#xff1a; 第一章 CAXA3D实体设计入门基础概述 &#xff08;150分钟&#xff09; 第二章 CAXA3D实体设计二维草图 &#xff08;230分钟&#xff09; 第三章 CAXA实体设计 特征生成…

OpenHarmony实战:瑞芯微RK3568移植案例

本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vibrato…

基于springboot实现在线教育平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线教育平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务在线教育系统的开发全过程。通过分析微服务在线教育系统管理的不足&#xff0c;创建了一个计算机管理微服务在线…

CASA模型教程

原文链接&#xff1a;CASA&#xff08;Carnegie-Ames-Stanford Approach&#xff09;模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600635&idx6&sna655a8de570edcaa435d6e917b66d9b3&chksmfa82081ccdf5810a33a778e8771bb116bde9e5a1f795da…

深入剖析OR与UNION的区别及应用场景

深入剖析OR与UNION的区别及应用场景 引言一、概念与基本用法二、区别与联系三、实战应用与示例四、何时选用OR与UNION结论 引言 在SQL查询中&#xff0c;OR 和 UNION 这两个关键词虽然都可以用来合并数据集&#xff0c;但它们的工作方式和适用场景有着显著的不同。这里在通过实…

IRIS / Chronicles 数据结构备忘录

数据结构的内容主要涉及到索引和全局变量。 这部分的内容的问题在于概念多&#xff0c;和普通的数据库对应的内容也不太一样&#xff0c;需要花点时间了解。 networked items 有关英文的解释是&#xff1a; Networked items that point to databases that use padded-string…

Vue 打包或运行时报错Error: error:0308010C

问题描述&#xff1a; 报错&#xff1a;Error: error:0308010C 报错原因&#xff1a; 主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制&#xff0c;nodeJs v17 之前版本没影响&#xff0c;但 V17 和之后版本会出现这个错误…

Map接口及其实现类及常用方法

1.Map接口及其实现类 java.util.Map : 存储一对一对的数据(key-value键值对)|----->HashMap : 主要实现类,线程不安全,效率高,可以添加null的键值对;底层使用数组单向链表红黑树。|------->LinkedHashMap : 是HashMap的子类,在HashMap的数据结构的基础上,添加了一对双向…

redis缓存穿透,雪崩,击穿

redis缓存穿透&#xff0c;雪崩&#xff0c;击穿 redis雪崩定义解决 redis缓存击穿定义解决 redis缓存穿透定义解决 redis雪崩 定义 当大量缓存数据在同一时间过期&#xff08;失效&#xff09;或者 Redis 故障宕机时&#xff0c;如果此时有大量的用户请求&#xff0c;都无法…

读博做FPGA上的AI加速能不能搞啊?

从企业的角度来看&#xff0c;选择在FPGA上进行AI加速仍然有其一定的优势和适用场景&#xff0c;但也有一些挑战需要考虑。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给…

如何做数据库优化(一些常见的优化方式和经验总结)

数据库优化是提高应用性能的重要方面。以下是一些常见的数据库优化方式和特殊技巧&#xff1a; 查询优化 索引使用&#xff1a;为常用的查询字段创建索引。正确使用索引可以显著提高查询效率。避免全表扫描&#xff1a;尽量避免在 WHERE 子句中使用会导致全表扫描的操作。使用…

【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)

目录 题目思路及实现方式一&#xff1a;迭代模拟&#xff08;用链表模拟这个游戏&#xff09;思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;数学迭代思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式三&#xff1a;递归思路代码实现Java版…

【CSS疑难点汇总】1.bor-box失效情况总结以及高宽设置为auto的情况

1. box-sizing box-sizing是改变盒子宽高的计算方式&#xff0c;一般使用bor-box&#xff0c;消除padding和border对整个盒子的影响&#xff0c;但在没有明确给出宽高的情况下&#xff0c;box-sizing是没有效果的 1.1 box-sizing不生效的情况 1.1.1块级盒子嵌套 ​ 宽度继承…

(一)基于IDEA的JAVA基础12

一维数组 为什么使用数组: 当我们需要存储一系列数据的时候&#xff0c;就需要用到数组&#xff0c;如果不使用数组&#xff0c;我们就要需要一个一个的去声明变量&#xff0c;这样浪费内存空间&#xff0c;同时效率低下。 什么是数组: 数组本身就是一个变量&#xff0c;只…

【WPF应用34】WPF基本控件-Menu的详解与示例

WPF&#xff08;Windows Presentation Foundation&#xff09;是.NET框架的一个部分&#xff0c;用于构建桌面应用程序的用户界面。在WPF中&#xff0c;菜单&#xff08;Menu&#xff09;是一种常用的控件&#xff0c;用于提供一组选项或命令&#xff0c;使用户可以根据自己的需…

Docker搭建CodiMD

使用 CodiMD Docker 镜像搭建协作文档平台 CodiMD 是一个开源的在线协作文档平台&#xff0c;类似于 Google Docs&#xff0c;它可以让用户创建、编辑和共享文档&#xff0c;并支持实时协作编辑功能。使用 Docker 镜像&#xff0c;您可以轻松地在自己的服务器上部署 CodiMD&am…

(3)(3.1) 英特尔Realsense深度摄像头(二)

文章目录 前言 5 配置ArduPilot 6 地面测试&#xff1a;飞行前验证 7 飞行测试 8 实验 9 数据闪存记录 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在…

javaScript手写专题——实现instanceof/call/apply/bind/new的过程/继承方式

目录 原型链相关 手写instanceof 实现一个_instance方法&#xff0c;判断对象obj是否是target的实例 测试 手写new的过程 实现一个myNew方法&#xff0c;接收一个构造函数以及构造函数的参数&#xff0c;返回构造函数创建的实例对象 测试myNew方法 手写类的继承 ES6&…