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

做字幕的网站网站快速搜索

做字幕的网站,网站快速搜索,广州网站建设品牌,网站使用支付接口如何收费今日复习内容:基础算法中的位运算 1.简介 位运算就是对二进制进行操作的运算方式,分为与运算,或运算,异或运算,取反,左移和右移。 (1)与运算 xyx&y000010100111 (2)或运算 …

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

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 -= 1r -= 1ans = 0for 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 * xdic = {}dic[0] = 1for j in range(n):ans += dic.get(pre_xor[j] ^ xor,0)dic(pre_xor[j]) = dic.get(pre_xor[j],0) + 1ans = n * (n + 1) // 2 - ans
print(ans)

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

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

http://www.yidumall.com/news/11851.html

相关文章:

  • 做网站开发的步骤重庆网站搭建
  • 做b2b网站用什么架构黑马it培训班出来现状
  • 什么网站做热能表好软件网站排行榜
  • 山东省建设工会网站传统营销与网络营销的整合方法
  • 建网站需要什么软件推广app赚佣金平台有哪些
  • 做家政下载什么网站或什么群呢小程序开发哪家好
  • xp做网站优化网站标题名词解释
  • 网站怎么做电脑系统下载软件发外链的平台有哪些
  • 重庆建网站 私单分类达人介绍
  • 自助建设分销商城网站免费网站开发平台
  • 徐州做网站建设做seo排名
  • 展示型网站首页设计解析广州网站seo地址
  • 云计算网站建设网页开发
  • 电子商务公司网站建立今日头条极速版最新
  • 网站开发属于固定资产吗seo站外推广有哪些
  • 商城网站开发模板百度seo怎么查排名
  • 网站设计可以用性原则最新seo自动优化软件
  • 网站后台模板html宁波seo服务
  • 心悦免做卡领取网站小程序源码网
  • 微信分销网站开发种子库
  • 网站头图设计营销策略是什么意思
  • 苏州园区两学一做网站app拉新佣金排行榜
  • 免费不收费的软件app天津seo排名扣费
  • 怎么自己做模板网站深圳市seo点击排名软件价格
  • wordpress获取用户注册时间上海网优化seo公司
  • 网站推广优化淄博公司百度地图在线查询
  • 创建网站超链接抖音怎么推广
  • 阿里云做网站多少钱seozou是什么意思
  • 西青网站建设seo知名公司
  • 网站开发单位百度竞价广告的位置