python 基础知识点(蓝桥杯python科目个人复习计划32)

news2024/9/29 7:25:42

今日复习内容:基础算法中的位运算

1.简介

位运算就是对二进制进行操作的运算方式,分为与运算,或运算,异或运算,取反,左移和右移。

(1)与运算

xyx&y
000
010
100
111

(2)或运算

xyx|y
000
011
101
111

(3)异或运算

xyx^y
000
101
011
110

异或运算满足以下性质:

交换律:x ^ y = y ^ x

结合律:(x ^ y) ^ z = x ^ (y ^ z)

自反性:x ^ x = 0

零元素:x ^ 0 = x

逆运算:若 x ^ y = z ,则两边同时异或y,得x = z ^ y。

(4)取反(~)

就是把原来的1变为0,把原来的0变为1。

(5)左移(<<)

向左移动指定数位。

举个例子:

6 的二进制为110,我把它放在一个表格里,下面一行就是向左移2位。

00110
11000

每次左移一位,就相当于多乘了一个2。(结合二进制还原为10进制的步骤理解)

(6)右移(>>)

右移和左移的原理一样,每次右移一位,就相当于多除了一个2。

2.用途

  • 判断奇偶性

举个例子:6的二进制为110,3的二进制为11,这样就好理解了。 

  • 求出x二进制的第i位

比如获取第0位(记为X0),可以直接来一个操作: X0 & 1,如果结果是1,则第0位就是1,如果结果是0,那么第0位就是0。

如果题目让获取第i位,那就用右移,把它移动到第0位,再用上面的方法。

(抱歉,我现在只能理解这些知识点,等我第二次复习的时候,再补上剩下的,有些知识点我还没懂)

3.例题

例题1:二进制中1的个数

题目描述:

给定一个整数x,输出该数二进制中1的个数;

例如,9 的二进制是1001,1的个数是2.

输入描述:

输入一个x(内存空间为32位的整数)

输出描述:

输出一个数,表示x二进制中1的个数。

参考答案:

x = int(input())
ans = 0
for i in range(32):
    if (x >> i) & 1:
        ans += 1
print(ans)

运行结果:

例题2:区间或

题目描述:

给定一个长度为n的数组a。现在有q次询问,给出两个整数l和r,求a[l];|;a[l + 1];|...;|;a[r - 1];|;a[r]的值,其中|表示按位或。

输入格式:

第一行输入两个整数n和q,分别表示数组的长度和 询问的次数;

接下来一行输入n个数:a[1],a[2],...,a[n],表示数组a;

接下来q行:

每行两个整数l和r,代表询问给出的区间。

输出格式:

对于每一次询问,输出一个整数表示结果。

名词解释:

或运算:只要有1则为1;

区间或:区间中的每一数位都单独计算,只要按数位分的区间中有一个1,则该数位的或运算就是1。

参考答案:

from itertools import accumulate
import sys
input = sys.stdin.readline
print = sys.stdout.write
n,q = map(int,input().split())
a = list(map(int,input().split()))
a_bit = []
# 每一位单独考虑,求a数组的每个数组的第i位的情况
for i in range(31):
    now_bit = []
    for x in a:
        now_bit.append((x >> i) & 1)
    # 求前缀和,方便后续计算区间和
    a_bit.append(list(accumulate(now_bit)))

for _ in range(q):
    l,r = map(int,input().split())
    l -= 1
    r -= 1
    ans = 0
    for i in range(31):
        if l == 0:
            now = a_bit[i][r]

        else:
            now = a_bit[i][r] - a_bit[i][l - 1]

        if now >= 0:
            ans += (1 << i)


    print(str(ans) + '\n')

例题3:异或森林

题目描述:

在一个神秘的世界中,存在着一个叫做“异或森林”的地方,异或森林中的每个树木都拥有独特的力量。肖恩进入了这片森林,他得到了一个任务:找出数组中满足条件的子数组,使得子数组中所有元素异或运算结果的因数为偶数,完成任务将揭示宝藏的所在地。现在,你能告诉肖恩有多少个子数组满足条件吗?

输入描述:

第一行输入一个数字n表示数组元素个数;

第二行输入n个数字,第i个数字a[i]表示数组的第i个元素;

数据保证1 <= n <= 10^4 , 1 <= a[i] <= n。

输出描述:

输出一个数字,表示满足条件的子数组的个数。

提示:

区间异或 = 前缀异或;

异或值因数个数为偶数等价于异或值为非平方数;

参考答案:

n = int(input())
a = list(map(int,input().split()))
# 预处理前缀异或,方便后续出来区间异或
pre_xor = [0] * n
pre_xor[0] = a[0]
for i in range(1,n):
    pre_xor[i] = pre_xor[i - 1] ^ a[i]
    
ans = 0
for x in range(200):
    xor = x * x
    dic = {}
    dic[0] = 1
    for j in range(n):
        ans += dic.get(pre_xor[j] ^ xor,0)
        dic(pre_xor[j]) = dic.get(pre_xor[j],0) + 1
        
ans = n * (n + 1) // 2 - ans
print(ans)

说实话,我虽然做出了这个题,但是我好像理解了,又好像没理解,看来得再研究一下。

OK,这篇就写到这里,下一篇继续! 

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

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

相关文章

OpenHarmony—Hap包签名工具

概述 为了保证OpenHarmony应用的完整性和来源可靠&#xff0c;在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。developtools_hapsigner仓 提供了签名工具的源码&#xff0c;包含密钥对生成、CSR文件生成、证书生成、Profile文件签名、Ha…

【安装指南】maven下载、安装与配置详细教程

&#x1f33c;一、概述 maven功能与python的pip类似。 Apache Maven是一个用于软件项目管理和构建的强大工具。它是基于项目对象模型的&#xff0c;用于描述项目的构建配置和依赖关系。以下是一些关键的 Maven 特性和概念&#xff1a; POM&#xff08;Project Object Model&…

MATLAB知识点:矩阵的拼接和重复

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.3.4 矩阵的拼接和重复 有时候我们需要对多个矩…

云原生Kubernetes: Ubuntu 安装 K8S 1.23版本(单Master架构) 及故障恢复

目录 一、实验 1.环境 2.安装 Ubuntu 3.连接Ubuntu 4.master节点安装docker 5.node节点安装docker 6.master节点安装K8S 7.添加K8S工作节点 8.安装网络插件calico 9.故障 10.故障恢复 11.测试k8s网络和coredns 二、问题 1.Ubuntu如何修改镜像源 2.Ubuntu和Windo…

KAFKA节点故障的容错方案

KAFKA节点故障的容错方案 1. broker启动加载逻辑1.1 日志组成和分析1.2 snapshot文件1.3 broker启动流程1.4 LogManager的初始化和启动过程 2. controller高可用1.1 选主逻辑1.2 HA切换1.3 controller的职责 3. partition高可用3.1 ISR列表3.1 选举Leader 4. 疑问和思考4.1 如果…

11:按键

按键 1、按键的相关知识2、独立按键3、CPU如何处理按健4、编程测试&#xff08;用LED1作为指示&#xff09;5 、编程测试&#xff08;用8个LED作为指示&#xff09; 1、按键的相关知识 分为独立按键和矩阵按键 2、独立按键 由图得独立按键右边接地&#xff0c;左边独立连接到…

正则表达式可视化工具regex-vis

什么是正则表达式 &#xff1f; 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。【百度百科】 正则表达式用简短…

题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?

lua脚本如下 最原始的解题方法 local str{} local i, j, k0, 0, 0 for i1, 4 do for j1, 4 do for k1, 4 do if i~j and i~k and j~k then str[#str1]i..j..k end end end end print("组成的数有"..#str) print(table.unpack(str)) 运行的结果如下 组成的数有24 1…

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法&#xff0c;从选定的每类方法中 &#xff0c;各选一种具体的方法&#xff0c;从给定的数据集中选一 个数据集&#xff08;MNIST&#xff0c;CIFAR-10&#xff0c;电信用户流失数据集 &#xff09;对这…

微信小程序新手入门教程三:基础语法介绍

WXML&#xff08;WeiXin Markup Language&#xff09;是框架设计的一套标签语言&#xff0c;可以与各种组件相结合&#xff0c;进行页面构建。 一 常用标签 wxml的语法结构与我们熟悉的html很像&#xff0c;但在细节处略有不同&#xff0c;我们可以参考html标签对比记忆。wxm…

基于协同过滤的个性化电影推荐系统分析设计python+flask

本系统为用户而设计制作个性化电影推荐管理&#xff0c;旨在实现个性化电影推荐智能化、现代化管理。本个性化电影推荐自动化系统的开发和研制的最终目的是将个性化电影推荐的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利…

华为OD机试真题【日志首次上报最多积分】

1、题目描述 【日志首次上报最多积分】 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。 如果上报太频繁&#xff0c;会对服务端造成压力;如果上报太晚&#xff0c;会降低用户的体验&#xff1b; 如果一次上报的…

京东物流基于 StarRocks 的数据分析平台建设

作者&#xff1a;京东物流 数据专家 刘敬斌 小编导读&#xff1a; 京东集团 2007 年开始自建物流&#xff0c;2017 年 4 月正式成立京东物流集团&#xff0c;截至目前&#xff0c;京东物流已经构建了一套全面的智能物流系统&#xff0c;实现服务自动化、运营数字化及决策智能化…

whale-quant 学习 part7:量化回测

量化回测 计算策略评估指标聚宽平台量化回测实践策略实现 参考 计算策略评估指标 使用数据为&#xff1a;贵州茅台&#xff08;600519.SH&#xff09;、工商银行&#xff08;601398.SH&#xff09;、中国平安&#xff08;601318.SH&#xff09;&#xff0c;策略基准是沪深300指…

使用输出事件激活Simulink块

什么是输出事件? 输出事件是发生在Stateflow图表中,但在图表外的Simulink块中可见的事件。这种类型的事件允许图表将图表中发生的事件通知模型中的其他块。 您可以使用输出事件来激活同一模型中的其他块。您可以在图表中定义多个输出事件,其中每个输出事件映射到一个输出端…

Flutter组件 StatefulWidget、StatelessWidget 可继承写法

前言 学过Java的同学&#xff0c;应该都知道面向对象语言的三大特征&#xff0c;封装、继承、多态&#xff1b; Dart也是面向对象的语言&#xff0c;但是在Flutter中的很多组件都被下划线 _ 标记为私有&#xff0c;导致无法继承&#xff0c;本文将介绍一种非私有的创建组件写…

大数据-Spark-关于Json数据格式的数据的处理与练习

上一篇&#xff1a; 大数据-MapReduce-关于Json数据格式的数据的处理与练习-CSDN博客 16.7 Json在Spark中的引用 依旧利用上篇的数据去获取每部电影的平均分 {"mid":1,"rate":6,"uid":"u001","ts":15632433243} {"m…

Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用

一、前言 之前在做倍速这个功能的时候&#xff0c;发现快速播放会有滴滴滴的破音出现&#xff0c;正常1倍速没有这个问题&#xff0c;尽管这个破音间隔很短&#xff0c;要放大音量才能听到&#xff0c;但是总归是不完美的&#xff0c;后面发现&#xff0c;通过修改qaudiooutpu…

centOS/Linux系统安全加固方案手册

服务器系统:centos8.1版本 说明:该安全加固手册最适用版本为centos8.1版本,其他服务器系统版本可作为参考。 1.账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤  使用命令 userdel <用户名> 删除不必要的账号。  使用命令 passwd…

ubuntu 上安装和配置Apache2+Subversion

目录 一、安装Apache2和SVN 二、Apache2设置 三、subversion配置 四、创建仓库和设置权限 五、仓库备份和恢复 系统环境 Ubuntu Linux (20.04) apache2 Subversion(1.13.0) 一、安装Apache2和SVN 通过命令在线安装apache2和subversion apt-get install apache2 libap…