
位运算
文章平均质量分 70
Frozen_Guardian
已退役菜鸡Acmer
展开
-
2021牛客多校3 - Kuriyama Mirai and Exclusive Or(差分+倍增)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,现在需要执行 mmm 次操作,每次操作分为下列两种类型:0 l r x:区间 [l,r][l,r][l,r] 内的数都异或上 xxx1 l r x:区间 [l,r][l,r][l,r] 内的数异或上一个首项为 xxx 公差为 111 的等差序列,具体来说就是 a[l]⊕x,a[l+1]⊕(x+1),...,a[r]⊕(x+r−l)a[l]\oplus x,a[l+1]\oplus (x+1),...,a[r]\oplus (x+r-l)a[原创 2021-08-05 21:06:35 · 251 阅读 · 0 评论 -
AtCoder - arc098_b Xor Sum 2(尺取+位运算)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,现在要求 Al xor Al+1 xor ... xor Ar=Al + Al+1 + ... + ArA_l\ xor\ A_{l+1}\ xor\ ...\ xor\ A_r = A_l\ +\ A_{l+1}\ +\ ...\ +\ A_rAl xor Al+1 xor ...&原创 2021-07-31 21:41:15 · 218 阅读 · 0 评论 -
LibreOJ - 3083 与或和(单调栈+位运算)
题目链接:点击查看题目大意:给出一个 n∗mn*mn∗m 的矩阵,要求所有子矩阵的“按位与和”和“按位或和”题目分析:通过样例一的提示,不难想到拆位之后原矩阵会变成 010101 矩阵。对于“按位与”来说,一个子矩阵有贡献当且仅当子矩阵中全为 111 ,而同理,对于“按位或”来说,一个子矩阵没贡献当且仅当子矩阵中全为 000。所以我们的问题转换为了,如何求解 010101 矩阵中,全 000 或全 111 子矩阵的个数去年遇到的一个模型,放到今年就不会了,反向训练第一人:牛客 - Animal Pro原创 2021-07-30 19:43:30 · 152 阅读 · 0 评论 -
2021牛客多校4 - Tree Xor(线段树+异或区间拆分)
题目链接:点击查看题目大意:给出一棵 nnn 个点组成的树,每个点权的取值范围是 [li,ri][l_i,r_i][li,ri],每条边权代表的是两点的异或值,现在问这棵树有多少种有效赋值题目分析:假设点 111 为基准点,找到点 111 到 nnn 个点的路径上的异或和记为 wiw_iwi,那么问题转换为了,点 111 有多少种可行的取值 xxx,需要同时满足 nnn 个不等式:li≤(wi⊕x)≤ril_i\le (w_i\oplus x)\le r_ili≤(wi⊕x)≤ri考虑 w原创 2021-07-27 10:49:52 · 456 阅读 · 0 评论 -
CodeForces - 1174D Ehab and the Expected XOR Problem(构造+思维+位运算)
题目链接:点击查看题目大意:给出一个 n,再给出一个 x,要求构造一个数列,满足该数列的所有子串的异或和都不等于 0 且都不等于 x,在满足上面的条件下尽可能长题目分析:因为这个题目最终的目标是需要让所有的“子串”的异或和都不等于某个值,因为是连续的,所以不难想到可以对于答案数组求一下前缀异或和,此时所有的“子串”都可以通过前缀异或和的任意两个数字表示出来,如 (a[ l ] xor a[ l + 1 ] xor ... xor a[ r - 1 ] xor a[ r ] )= sum[ r ]..原创 2020-12-10 22:26:03 · 212 阅读 · 0 评论 -
CodeForces - 1457D XOR-gun(位运算+暴力)
题目链接:点击查看题目大意:给出一个长度为 n 的非降序列,现在可以执行数次操作:选择相邻的两个位置将其替换成异或和,更具体的,每次操作可以选择一个位置 i ,满足 1 <= i < n,令 a[ i ] = a[ i ] xor a[ i + 1 ] 并删除掉 a[ i + 1 ],问最少需要操作多少次才能使得整个序列不再非降题目分析:假设 b[ i ] 为 a[ i ] 最高位的那个 1,比较显然的是,假设 b[ i - 1 ] == b[ i ] == b[ i + 1 ] 时,答原创 2020-11-30 12:46:26 · 319 阅读 · 6 评论 -
CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)
题目链接:点击查看题目大意:在 x = -100 的直线上有 n 个敌方飞船,在 x = 100 的直线上有 m 个敌方飞船,现在在 x = 0 的直线上可以选择两个点作为诱饵,使得两侧的飞船瞄准射击,问如何才能击落尽量多的飞船题目分析:因为 n 和 m 只有 60,所以在 x == 0 时至多有 n * m 个交点,然后去 O( n^2 ) 去枚举交点暴力计算答案即可,对于每个交点来说,状压记录一下两侧可以击落的飞船,然后维护一下最大值就好了更简单的一个思路就是,因为两侧的飞船分别位于 x =原创 2020-11-25 21:39:23 · 329 阅读 · 0 评论 -
2020CCPC(长春) - Strange Memory(树上启发式合并+位运算)
题目大意:给出一棵n 个点组成的有根树,一号节点是根节点,现在要求实现 n * n 的公式:题目分析:树上启发式合并,需要修改部分内部实现,如果可以想到树启的话,那么应该往子树上去靠拢,当每个点作为子树的根时,其可以作为 lca 然后去统计子树中可以匹配的 ( u , v ) 点对,这个题目因为 a[ i ] != 0,换句话说,点 u , v , lca( u , v ) 一定是互不相同的三个点,极大程度上简化了题目(因为三个点的形式一定是一个分叉的形状,不可能是链状的),换句话说,当 lca ...原创 2020-11-09 19:30:25 · 2524 阅读 · 7 评论 -
洛谷 - P2761 软件补丁问题(spfa+状压)
题目链接:点击查看题目大意:给出 n 个错误,再给出 m 个补丁,对于每个补丁而言,设 b1,b2,f1,f2 分别为四个集合:当且仅当 b1 所表示的错误全部存在且 b2 所表示的错误没有任何一个存在时才可以使用该补丁,使用该补丁会花费 t 的时间,使用该补丁后会:修复掉 f1 中的所有错误,重新制造出 f2 中的错误,问修复掉 n 个错误的最短时间题目分析:因为 n 只有 20,所以考虑状压,然后就是类似于 dp 一样的最短路转移了,一提到最短路转移到的 dp ,spfa 肯定是一个不错的选择原创 2020-10-16 21:30:17 · 249 阅读 · 0 评论 -
SPOJ - OPTM Optimal Marks(进制拆分+最小割)
题目链接:点击查看题目大意:给出一个由 n 个点和 m 条边组成的图,有 k 个点初始时就有权值 w[ i ],现在问如何给剩下的节点赋值,使得整张图的总权值和最小,每条边的权值为:w( u , v ) = w[ u ] xor w[ v ]题目分析:因为异或运算属于位运算,所以对于每一位来说其贡献都是相互独立的,可以分开之后分别计算这样问题就转换成了,对于那些未赋值的位置来说,选择 0 或 1 将其赋值,因为每个位置的取值只有两种选择,又是一种最优性问题,不难想到最小割建图思路也比较简单:原创 2020-10-08 20:26:31 · 243 阅读 · 0 评论 -
HihoCoder - 1873 Frog and Portal(构造+进制拆分)
题目链接:点击查看题目大意:给出 200 个石头,有一只青蛙要从第 0 个石头跳到第 200 个石头,每次只能跳 1 步或 2 步,显然可行的方案数是一个斐波那契数列,现在可以在两个石头上放置传送门 x -> y ,当青蛙跳到石头 x 上后,会立马传送到石头 y 上,问如何构造传送门,使得从 0 到 200 的方案数恰好外 m题目分析:看到斐波那契数列,就不难想到齐肯多夫定理,考虑类比于二进制拆分那样,用斐波那契数列将 m 进行拆分,因为 fib[ 44] 才刚好大于 1e9,所以剩下了 1.原创 2020-09-17 11:05:37 · 198 阅读 · 0 评论 -
HDU - 5573 Binary Tree(思维+构造+二进制)
题目链接:点击查看题目大意:给出一棵无限大的完全二叉树,每次给出一个 n 和一个 k ,要求从点 1 出发一直向下,找到一条长度为 k 的路径,对于路径上的点可以加上其编号,也可以减去其编号,需要构造出一种方案,使得计算的结果为 n题目分析:因为 k 最大只有 60 ,给足了提示是需要往二进制上思考,但奈何对二进制的题目不太敏感,之前打 cf 时碰到的二进制题目也是因为不会做无奈只能掉分。。菜啊回到这个题目,稍微画几层这个完全二叉树,不难发现最左边的一条链上恰好是二进制数,也就是 1 , 2 ,原创 2020-09-02 01:26:18 · 236 阅读 · 0 评论 -
HDU - 6749 Mosquito(二分+状态压缩+最大流)
题目链接:点击查看题目大意:给出一个 n * m 的房间,再给出 k 个蚊子窝(保证蚊子窝在边界上),每个蚊子窝内有数只蚊子,单位时间内蚊子可以移动一个单位的曼哈顿距离,蚊子们都是非常聪明的,问最少需要多少时间,蚊子可以将整个房间都占领,即每个格子上至少存在一个蚊子题目分析:看了题解之后发现非常巧妙的一道网络流代码:#include<iostream>#include<cstdio>#include<string>#include<.原创 2020-07-20 02:42:42 · 340 阅读 · 0 评论 -
ICPC Pacific Northwest Regional Contest 2016 - Barbells(状态压缩+枚举子集的子集)
Your local gym has n barbells and m plates. In order to prepare a weight for lifting, you mustchoose a single barbell, which has two sides. You then load each side with a (possibly empty) setof plates. For safety reasons, the plates on each side must sum t原创 2020-06-21 19:54:10 · 413 阅读 · 0 评论 -
CodeForces - 1368D AND, OR and square sum(位运算+贪心)
题目链接:点击查看题目大意:给出 n 个数组成的序列 a ,现在可以进行的操作是,任选两个下标 i 和 j ,满足 i != j ,使得:设 x = a[ i ] , y = a[ j] a[ i ] = x and y a[ j ] = x or y问经过任意次操作后,a[ 1 ] * a[ 1 ] + a[ 2 ] * a[ 2 ] ... + a[ n ] * a[ n ] 的最大值是多少题目分析:首先需要观察出的一个前置性质就是,x + y = ( x or y ) + ( x .原创 2020-06-19 17:35:23 · 443 阅读 · 0 评论 -
牛客 - Dress as women(sg定理+位运算)
题目链接:点击查看题目大意:两个人正在玩游戏,现在给出 n 个点,两个人轮流操作,每次可以选择任意个贡献的顶点然后删除,最后无法操作的人失败题目分析:读完题后想到了之前做过的一道题目:点击查看因为 n 比较小,不难想到状态压缩,所以最朴素的做法就是设 m = 2^n ,直接 m * m 枚举状态然后写 dfs 转移状态就好了,在此之前需要记得预处理一下共线的限制,共线限制也可以利用状态压缩来保存,只需要判断每个二进制状态中所有为 1 的位置是否共线即可,在处理共线限制时,因为时间复杂度计算的比较原创 2020-06-17 01:54:56 · 290 阅读 · 0 评论 -
牛客 - Final Exam(贪心)
题目链接:点击查看题目大意:给出 n 个数组成的数组 a ,再给出 q 次询问,每次询问给出一个 m ,要求找到一个 k ,使得 ( k ^ a[ i ]) 之和小于等于 m 且 k 最大,若不存在输出 - 1题目分析:首先在知道数组 a后,我们可以通过构造一个 k ,使得 ( k ^ a[ i ] ) 之和最小,这样在每次询问时,如果给出的 m 比最小的( k ^ a[ i ] ) 之和还要小,那么答案显然就是 - 1 了,否则的话按位从最高位开始贪心就好了,贪心的策略就是当前的位如果放置...原创 2020-06-17 01:21:40 · 245 阅读 · 0 评论 -
牛客 - 小V的序列(思维+位运算)
题目链接:点击查看题目大意:给出一个均匀分布,长度为 n 的数列,再给出 m 次询问,每次询问给出一个 y ,询问数列中是否存在 x 与 y 相似,相似的定义如下:x,y相似当且仅当x xor y的二进制表示中1的个数小于等于3个。题目分析:这个题目确实很巧啊,首先 n 和 m 都是 1e6 级别的,所以每个查询需要在常数级别的时间复杂度内完成,而 n 是 1e6 , 且每个数的范围是 2^64 ,且所有数字类似于随机数一样均匀分布,这里先提一下,下面要用然后是需要根据题意转换一个结论,若原创 2020-05-16 14:06:33 · 1945 阅读 · 2 评论 -
CodeForces - 1312C Adding Powers(思维+位运算)
题目链接:原创 2020-03-10 01:49:39 · 524 阅读 · 0 评论 -
2019ICPC(上海) - Color Graph(二分图+状态压缩)
题目链接:点击查看题目大意:给出一个由 n 个点和 m 条边组成的无向图,保证无自环无重边,初始时所有的边都是白色的,现在要求尽可能多的将白边染成红色,不过需要保证不存在红色的奇环,问最多能染多少条边题目分析:先说题目,读完题后看到不存在奇环,就是二分图的定义了,而数据给的又非常的小,再往状态压缩上想,一来一去不难想到用二进制的 0 和 1 表示二分图的两个部分,枚举每个状态,对于每个状态...原创 2020-02-16 23:47:39 · 601 阅读 · 0 评论 -
牛客 - Hash(思维+进制转换)
题目链接:点击查看题目大意:给出一个长度为 6 的字符串 s ,再给出模数 mod,现在规定哈希值为如下运算:const int LEN = 6;int mod;int Hash(char str[]){int res = 0;for (int i = 0; i < LEN; i++){res = (res * 26 + str...原创 2020-02-14 03:28:55 · 263 阅读 · 0 评论 -
CodeForces - 1249C2 Good Numbers (hard version)(进制转换)
题目链接:点击查看题目大意:给出一个数n,求出一个大于等于n的“好数”,“好数”的规定是只由3的幂次之和构成题目分析:直接将n拆成三进制,然后贪心从最高位开始找等于2的位置,找到后从这个位置开始,前面的位全部置零,后面找到一个等于零的位变成一就行了,因为如果想消去这个二,而且要满足大于等于原数,那么就必须让这个二进位,既然进位就会影响到后面较高的位,依次类推,只有到了第一个等于零的位置才能...原创 2020-01-23 23:50:25 · 327 阅读 · 0 评论 -
CodeForces - 1288D Minimax Problem(二分+状态压缩)
题目链接:点击查看题目大意:给出一个n*m的矩阵,我们用maze[n][m]来表示每一个元素,现在我们需要选出其中 i 和 j 两行,i 和 j 可以相同,用这两行的元素构成一个新的数组a,构造规则为a[k]=max(maze[i][k],maze[j][k]),现在我们要使数组a中的最小值最大,请问该如何选择 i 和 j 才能满足条件题目分析:读完题目后感觉乱糟糟的,但静下心来分析一下,...原创 2020-01-17 01:01:43 · 545 阅读 · 0 评论 -
洛谷 - P4011 孤岛营救问题(bfs+状态压缩)
题目链接:点击查看题目大意:给出一个n*m的迷宫,其中有一些边为不可逾越的墙,有一些边为不同型号的门,而钥匙会分布在迷宫的不同位置,求从点(1,1)到点(n,m)的最短时间题目分析:出现在网络流里的一道题目。。但是一道很裸的bfs+状压,因为不同门的类型给的特别少,只有10种,如果bfs的话时间复杂度也才n*m*2^10,直接搜索就好了注意一下几个坑点:钥匙是永久性的而不是一次性的...原创 2019-12-20 10:12:14 · 276 阅读 · 0 评论 -
POJ - 3279 Fliptile(状态压缩+位运算+暴力)
题目链接:点击查看题目大意:给出一个n*m的01矩阵,为了好描述,我们设0和1是两个相反的状态,我们的目标是要将整个矩阵全部变成1,现在我们可以将某一个点(x,y)更改为相反的状态,不过相应的该点周围的四个点(x+1,y),(x-1,y),(x,y+1),(x,y-1)也都需要变为其本身相反的状态,问若想要满足条件最少需要操作多少次,并输出方案题目分析:今天看大蓝书位运算的时候看到了一个简...原创 2019-11-27 20:59:22 · 274 阅读 · 0 评论 -
(转)快速统计二进制中1的个数
大牛博客插眼:https://blog.youkuaiyun.com/u013243347/article/details/52220551证明在大牛的博客里,直接挂代码吧:时间复杂度从logn下降到了O(二进制中1的个数),可能没什么卵用,但起码能优化一点是一点嘛int cal(int x){ int cnt=0; while(x) { x=x&...转载 2019-11-27 19:03:45 · 330 阅读 · 0 评论 -
CH - 0104 起床困难综合症(位运算+贪心)
题目链接:点击查看题目大意:我们需要构造一个初始值start,范围在[0,m],要求使用这个初始值进行k次操作后得到的答案最大,每次操作分为三个类型:AND x:让当前答案与x进行按位与 OR x:让当前答案与x进行按位或 XOR x:让当前答案与x进行按位异或现在我们需要构造出这个start,使得经过k次操作后得到的end最大,输出end题目分析:首先我们肯定不能直接枚举m,然...原创 2019-11-27 18:51:04 · 1285 阅读 · 0 评论