二进制状态压缩相关操作

取出整数n在二进制表示下的第k位:(n>>k)&1

取出整数n在二进制表示下的第0~k-1位(后k位):n&((1<<k)-1)

把整数n在二进制表示下的第k位取反:n^(1<<k)

对整数n在二进制表示下的第k位赋值1:n|(1<<k)

对整数n在二进制表示下的第k位赋值0:n&(~(1<<k))

原文地址:https://www.cnblogs.com/Mr94Kevin/p/10376623.html

时间: 2024-10-05 04:17:59

二进制状态压缩相关操作的相关文章

二进制状态压缩及位运算

位运算符: 与(&),或(|),非(~), 异或(^); 移位运算: 1.左移:在二进制表示下把数字同时向左移动,低位以0填充,高位越界后舍弃 1 << n = 2^n, n << 1 = 2n 2.算术右移:在二进制补码表示下把数字同时向右移动,高位以符号位填充,低位越界后舍弃 n >> 1 = n/2.0(向下取整) eg:(-3)>> 1 = -2, 3 >> 1 = 1;  二进制状态压缩,是指将一个n位的 bool 数组用 n

# 最短Hamilton路径(二进制状态压缩)

最短Hamilton路径(二进制状态压缩) 题目描述:n个点的带权无向图,从0-n-1,求从起点0到终点n-1的最短Hamilton路径(Hamilton路径:从0-n-1不重不漏的每个点恰好进过一次) 题解:二进制状态压缩算法\(O(2^n*n^2)\),需要记录当前经过了哪些点,当前在哪个位置.\(f[i][j]\) ? \(i\)转化为二进制每一位代表是否经过该点,\(j\)表示当前位于j这个点 #include <iostream> #include <cstring> u

皮卡丘的梦想2(线段树+二进制状态压缩)

Description 一天,一只住在 501 实验室的皮卡丘决定发奋学习,成为像 LeiQ 一样的巨巨,于是他向镇上的贤者金桔请教如何才能进化成一只雷丘. 金桔告诉他需要进化石才能进化,并给了他一个地图,地图上有 n 个小镇,他需要从这些小镇中收集进化石. 接下来他会进行 q 次操作,可能是打听进化石的信息,也可能是向你询问第 l 个小镇到第 r 个小镇之间的进化石种类. 如果是打听信息,则皮卡丘会得到一个小镇的进化石变化信息,可能是引入了新的进化石,也可能是失去了全部的某种进化石. 如果是向

Sleep Buddies (二进制状态压缩)

Sleep Buddies 算法:状态压缩, 把每一个集合都压缩成一个数字. 使用方法:把每个状态都进行1<<(x-1)压缩,这样的话我们可以保证,每个二进制上代表的那个数字是1就代表存在这个属性. AC_Code 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e5+10; 5 #define rep(i,first,last) for(ll i

二进制状态压缩:应用及例题

1.位运算:https://www.cnblogs.com/yrjns/p/11246163.html 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) Tips: (1)&a

POJ-3279.Fliptile(二进制状态压缩 + dfs) 子集生成

昨天晚上12点刷到的这个题,一开始一位是BFS,但是一直没有思路.后来推了一下发现只需要依次枚举第一行的所有翻转状态然后再对每个情况的其它田地翻转进行暴力dfs就可以,但是由于二进制压缩学的不是很透,一直有小问题,下面我还会讲子集生成的相关方法,有兴趣的同学可以继续关注. 本题大意:一块地,有黑(1)白(0)之分,牛每次踩踏使得当前块以及四连块都变色,问当牛如何踩时使得地都变白并且求出最小踩踏次数和踩踏路径的最小字典序时的踩踏地图. 本题思路:由于同一块地被翻两次都会回到原来的状态,所以只需要对

Linux下的简单压缩相关操作

一.需求:压缩/data到/tmp下 操作: 1 [[email protected] /]# tar zcf /tmp/data.tar.gz data/ #压缩/data到/tmp下并将压缩包命名为data.tar.gz 2 [[email protected] /]# ls -lrt /tmp/ #查看/tmp下的文件 3 total 0 4-rw-r--r-- 1 root root 490 May 10 15:51 data.tar.gz #成功 二.需求:查看压缩包data.tar.

BFS+二进制状态压缩 hdu-1429

好久没写搜索题了,就当练手吧. vis[][][1025]第三个维度用来维护不同key持有状态的访问情况. 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支. // // main.cpp // hdu_1429 // // Created by Luke on 16/10/8. // Copyright © 2016年 Luke. All rights reserved. // #include <iostream> #include <string> #inclu

关于解压缩与创建压缩相关操作

gzip/bzip2/xz  文件      #压缩,1:速度最快压缩比例很少,9:与1的反过来,6:默认 gzip/bzip2/xz  -d  文件.gz/bz2      #解压 zcat  文件.gz/zip        #查看压缩文件.gz里的内容 bzcat  文件.bz2        #查看压缩文件bz2里的内容 xzcat   文件.xz        #查看压缩文件xz里的内容 less可以看 gz,bz2压缩的文件,但zip的不行. #xz,bzip2和gzip的参数大致相