蓝桥杯备赛Day10 位运算

news/2025/3/4 18:46:27/

位运算

1.要点

与:&
或:|
异或:^
非:~
异或运算性质:
(1)x^x=0
(2)x^0=x
(3)a^b^b=a(1,2推出)
(4)a^b=c->a=b^c(两侧同异或b)
位运算按补码计算

  • 正数的补码就是正数本身;
  • 负数的补码 = 负数的绝对值正数补码取反 + 1
    正数右移要用unsigned int最后才会变0(int高位补1)
    (1)将一个数乘(除) 2 的非负整数次幂
    x<<i(乘以2的i次方) x>>i(除以2的i次方)
    (2)判断数字奇偶性:
    x&1(x为奇数,二进制最后一位为1,x&1=1,反之x为偶数,二进制最后一位为0,x&1=0.优化x%2)
    (3)判断数字某一位1还是0:
    (x>>i) & 1
    (3)修改二进制中的某一位
    1.改为1
    x | (1<<i)(将x从右数第i位改为1)
    x:10010
    1<<3:01000
    结果:11010
    2.改为0(将x从右数第i位改为0)
    x & ~(1<<i):11010
    1<<3:01000
    ~(1<<3):10111
    结果:10010
    (4)快速判断一个数字是否为2的幂次方
    x & (x-1)(若为0,x是2的幂次方,反之不是)
    x:00100
    x-1:00011
    x & (x-1):00000
    x为2的幂次方,x-1肯定借位,最终0和1错位,结果为0
    x:00110
    x-1:00101
    x & (x-1):00100!=0
    x不是2的幂次方,x-1不会借最高的1位,最终里面肯定有个1,结果不为0
    (5)获取二进制位中最低位的1
    lowbit(x)=x & -x
    x:010010(18)
    -x:101101+1=101110(负数的绝对值取反 + 1)
    lowbit(x):000010

2.题目

2023异或和之和

重点:
(1)构造异或前缀和,利用上面异或的性质4,最终不是prefix[r]-prefix[l-1],而是prefix[r]^prefix[l-1],可以得90分
(2)优化:异或为位运算,考虑按位运算优化,考虑每一位0或1对当前位的贡献度(只有0^1=1).题目条件0-20位,对于每一位j,对于prefix[i],若prefix[i]=0,则算前面有多少个1,加上这个个数,就是这个0对这一位的贡献度,最终的和就表示有多少组0和1配对,就是当前位所有异或产生1的情况,然后次数乘上当前位的权重(cnt*(1<<j))
代码

#include <bits/stdc++.h>using namespace std;typedef long long ll;
const int N=1e5+10;
ll a[N],n,prefix[N];
ll res;int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++)	cin>>a[i];for(int i=1;i<=n;i++){prefix[i]=prefix[i-1]^a[i];}/*for(int l=1;l<=n;l++){for(int r=l;r<=n;r++){res+=prefix[r]^prefix[l-1];}}*/for(int j=0;j<=20;j++){ //A_i<=2^20int cnt0=0,cnt1=0; //0出现个数,1出现个数 ll cnt=0;for(int i=0;i<=n;i++){if( (prefix[i]>>j) & 1 ){ //当前位为1,cnt加上前面0的个数,1出现个数++ cnt+=cnt0;cnt1++;}          else{cnt+=cnt1;cnt0++;} 						  //当前位为0,cnt加上前面1的个数,0出现个数++}res+=(ll)cnt*(1<<j);		  //当前位的贡献度*当前位权重 }cout<<res;return 0;
}

http://www.ppmy.cn/news/1576612.html

相关文章

DeepSeek模型快速部署教程-搭建自己的DeepSeek

前言&#xff1a;在人工智能技术飞速发展的今天&#xff0c;深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型&#xff0c;凭借其高效的性能和灵活的部署方式&#xff0c;受到了广泛关注。无论是自然语言处理、图像识别&#xff0c;还是…

迷你世界脚本世界UI接口:UI

世界UI接口&#xff1a;UI 彼得兔 更新时间: 2023-10-25 10:40:44 具体函数名及描述如下: 序号 函数名 函数描述 1 setGBattleUI(...) 设置战斗总结UI 2 world2RadarPos(...) 世界坐标转换到小地图 3 world2RadarDist(...) 世界长度转换到小地图 4 …

Golang的性能分析指标解读

Golang的性能分析指标解读 一、概述 语言&#xff09;是一种由Google开发的开源编程语言&#xff0c;以其并发性能和高效的编译速度而闻名。对于程序员来说&#xff0c;了解如何对Golang应用程序进行性能分析是非常重要的&#xff0c;因为这能帮助他们发现潜在的性能瓶颈并对其…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…

C 注释编写模版

编写清晰、有用的注释是提高代码可读性和可维护性的关键。良好的注释不仅能帮助他人理解您的代码&#xff0c;也能在未来您自己或其他开发者需要维护或扩展代码时节省大量时间。下面提供了一些常见的注释模板和最佳实践&#xff0c;适用于不同的编程语言和场景。 头部文件注释&…

Spring +Spirng MVC+Mybatis +SpringBoot

AI ------>>>直接使用阿里的 通义天问 Maven基础 介绍 Maven 介绍 Maven 作用 项目构建 比较简单~ 核心功能 依赖管理 <!-- gavp属性--><groupId>com.example</groupId><artifactId>tials-manage</artifactId><version>0.0.1…

中间件专栏之MySQL篇——MySQL的基本原理和基本操作

一、什么是MySQL MySQL是一个常用的数据库管理系统&#xff0c;它是关系型数据库&#xff0c;它使用结构化查询语言&#xff08;SQL&#xff09;来管理数据库中的数据。MySQL 使用 表&#xff08;Table&#xff09;来存储数据&#xff0c;数据以 行&#xff08;Row&#xff09…

git命令学习记录

1. git reset 参数说明 git reset 是用来回退版本的&#xff0c;它可以添加三个参数&#xff0c;常用的使用格式是这样的&#xff1a;git reset [--hard | --soft | --mixed] 版本号 一般使用git修改文件并提交需要三步&#xff0c;第一步在文本编辑器中编辑文件&#xff0c;也…