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

news2024/11/24 3:11:02

蓝桥杯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.coloradmin.cn/o/1580997.html

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

相关文章

Xlinx相关原语讲解导航页面

原语就是对FPGA底层器件的直接调用&#xff0c;与IP功能是类似的&#xff0c;将原语的参数变成IP配置时的GUI界面参数&#xff0c;可能会更加直观。IP的缺陷在于繁杂&#xff0c;比如SelectIO IP内部包含IDDR、ODDR等等IO转换的功能&#xff0c;如果只想使用单沿转双沿一个功能…

Leetcode刷题-字符串详细总结(Java)

字符串 字符串可能在算法处理上面和数组是类似的&#xff0c;但是String和数组的数据结构还是有一些不一样的 1、反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 双指针的经典应用&#xff0c;两个指针同时向中间移动 public void reverseString(char[…

C语言进阶课程学习记录-第20课 - 链接过程简介

C语言进阶课程学习记录-第20课 - 链接过程简介 链接器静态链接实验-静态链接源代码生成目标文件打包生成静态库文件直接编译使用静态库编译 动态链接实验-动态链接源代码生成动态链接库文件直接编译使用动态链接库编译运行test.out删除dlib.so运行test.out 小结 本文学习自狄泰…

【算法】二分算法题

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 704. 二分查找1.1 分析1.2 代码 2. 34. 在排序数组中查找元素的第一个和最后一个位置2.1 分析2.2 代码 3. 35. 搜索插入位置3.1 分析3.2 代码 4. 852. 山脉数组的峰顶索引4.1 分析4.2 代码 5. 153. 寻找旋转排序数组中…

nexus设置s3存储

问题 因为我的nexus是安装在EC2上面&#xff0c;需要利用s3的存储能力&#xff0c;为nexus提供存储服务。 步骤 准备s3桶 输入桶名&#xff0c;创建s3桶&#xff0c;如下图&#xff1a; 创建桶读写策略 具体内容如下&#xff1a; {"Version": "2012-10-1…

【数据分享】我国第七次人口普查的100m分辨率人口栅格数据(免费获取\tif格式\2020年)

人口空间分布数据是我们在各项研究中经常使用的数据。之前我们分享过来源于LandScan数据集的2000-2022年的1km精度的人口空间分布栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01; 相较于LandScan全球人口数据集&#xff0c;我国历次人口普查的数据对于…

AI服务平台replicate

Replicate是一个提供优秀AI模型和工具的平台&#xff0c;旨在帮助用户实现各种人工智能任务。该平台汇集了来自各个领域的顶尖模型&#xff0c;涵盖了文本到图像生成、语言模型、图像编辑、超分辨率等多个领域。用户可以通过Replicate平台快速获取和应用先进的模型&#xff0c;…

【C++】优先级队列(priority_queue)的用法与实现

目录 一、概念&#xff1a; 二、仿函数&#xff08;Functor&#xff09;&#xff1a; 概念&#xff1a; 应用&#xff1a; 三、底层实现&#xff1a; 基本操作&#xff1a; 完整代码&#xff1a; 测试示例&#xff1a; 一、概念&#xff1a; 优先级队列&#xff08;pri…

小白水平理解面试经典题目1431. Kids With the Greatest Number of Candies【Array类】

个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 1431. 拥有最多糖果的孩子 小白渣翻译 一…

蓝桥杯刷题-17-平方差-打表+数学⭐(⊙o⊙)

之前的题目:最大也就到2e5左右。1e9的数据范围就意味着&#xff0c;即使是O(n)的复杂度&#xff0c;也会超时。此时可以考虑使用数学方法进行解题。 ❗打表:利用电脑去找一些合法答案&#xff0c;然后在这些合法答案中找规律。 ⭐打表后找到的规律: (1)好像所有的奇数都是合法…

spikingjelly训练自己的网络---量化 --测试

第二个 但是我发现&#xff0c;都要反量化&#xff0c;因为pytorch是只能支持浮点数的。 https://blog.csdn.net/lai_cheng/article/details/118961420 Pytorch的量化大致分为三种&#xff1a;模型训练完毕后动态量化、模型训练完毕后静态量化、模型训练中开启量化&#xff0c;…

Java 解决 Process 执行命令行命令报【CreateProcess error=2, 系统找不到指定的文件。】错误问题

目录 问题 问题代码 解决方案 判断操作系统 问题 使用 Process 执行命令行命令时&#xff0c;报 CreateProcess error2, 系统找不到指定的文件。但明明指定的文件是存在的。而且这种错误只在 IDEA 中运行会报错&#xff0c;打包后直接 java -jar 运行就能正常运行&#xf…

国产DSP FT-M6678开发-中断开发

全局中断控制器&#xff08;CIC&#xff09; FT-M6678 芯片集成了众多的外设&#xff0c;这些外设都可产生中断事件源&#xff0c;这些中断事件如何被服务取决于用户的特殊应用。在FT-M6678 芯片中&#xff0c;EDMA 和CorePac 都能够为事件服务&#xff0c;为了最大限度的增加系…

vue3第十六节(keep-alive 内置组件)

keep-alive 1、目的 在使用组件时&#xff0c;有时我们需要将组件进行缓存&#xff0c;而不是重新渲染&#xff0c;用以提高性能&#xff0c;避免重复加载DOM&#xff0c;提升用户的体验&#xff1b; keep-alive 组件可以做到这一点&#xff0c;它允许你缓存组件实例&#xf…

家用洗地机哪个牌子好?四大热销机型推荐,值得推荐!

随着科技的进步&#xff0c;洗地机在日常生活中能够帮助人们省时省力地打扫卫生&#xff0c;但市面上出现了各种各样的洗地机&#xff0c;好坏参差不齐&#xff0c;选择一个好品牌的洗地机非常重要&#xff0c;因为它们有着可靠的质量保证。那市面上如此众多的洗地机品牌&#…

Python爬虫之分布式爬虫

分布式爬虫 1.详情介绍 分布式爬虫是指将一个爬虫任务分解成多个子任务&#xff0c;在多个机器上同时执行&#xff0c;从而加快数据的抓取速度和提高系统的可靠性和容错性的技术。 传统的爬虫是在单台机器上运行&#xff0c;一次只能处理一个URL&#xff0c;而分布式爬虫通过将…

关于阿里云centos系统下宝塔面板部署django/中pip install mysqlclient失败问题的大总结/阿里云使用oss长期访问凭证

python版本3.12.0 问题1 解决方案 sudo vim /etc/profile export MYSQLCLIENT_CFLAGS"-I/usr/include/mysql" export MYSQLCLIENT_LDFLAGS"-L/usr/lib64/mysql" Esc退出编辑模式 &#xff1a;wq退出并且保存 问题二 说是找不到 mysql.h头文件 CentOS ‘…

【Python】不会优雅的记日志,你又又Out了!!!

1. 引言 在日常开发中&#xff0c;大家经常使用 print 函数来调试我们写的的代码。然而&#xff0c;随着打印语句数量的增加&#xff0c;由于缺乏行号或函数名称&#xff0c;很难确定输出来自何处。而且随着print语句的增多&#xff0c;调试完代码删除这些信息的时候也比较麻烦…

【动态规划-线性dp】【蓝桥杯备考训练】:乌龟棋、最长上升子序列、最长公共子序列、松散子序列、最大上升子序列和【已更新完成】

目录 1、乌龟棋 2、最长上升子序列 3、最长公共子序列 4、松散子序列 5、最大上升子序列和 1、乌龟棋 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘只有一行&#xff0c;该行有 N 个格子&#xff0c;每个格子上一个分数&#xff08;非负整…

植物大战僵尸Python版,附带源码注解

目录 一、实现功能 二、安装环境要求 三、如何开始游戏 四、怎么玩 五、演示 六、部分源码注释 6.1main.py 6.2map.py 6.3Menubar.py 七、自定义 7.1plant.json 7.2zombie.json 一、实现功能 实施植物&#xff1a;向日葵、豌豆射手、壁桃、雪豆射手、樱桃炸弹、三…