![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
逻辑运算
文章平均质量分 74
小酒窝.
大三菜鸡一只,欢迎来交流讨论,一起进步!
展开
-
CF - G. Even-Odd XOR(异或,构造)
为了解决这个问题,可以将第 n-1 个位置设置一个很大的数,比如 2^30,前面的数都设置成其位置 i,这样保证前 n-2 个位置的第 30 位始终不被占用,然后异或上 2^30 就能保证前 n-1 位置的异或和 sum 在前 n-2 个位置没有出现过。然后进一步考虑前 n-1 的异或和 sum 可能与第 n-1 位相同,即等于 2^30,也就是前 n-2 位异或和为 0。因为两个数只有相等时,异或值才能为 0,而奇数位置异或和 = 偶数位置异或和,所以两者再异或就是 0 了,即所有位置异或和为 0。原创 2022-09-27 11:54:15 · 823 阅读 · 0 评论 -
CF - D1/2. Burenka and Traditions (DP,异或,思维)
发现,当区间长度为 1 的时候花费为 1,长度为 2 花费为 1,长度为 3 花费 2,长度为 4 花费 2(长度为 2 的花费的两倍),长度为 6 花费为长度为 3 花费的两倍。如果两个相同的值异或会变为0,所以可以维护前缀异或,如果 [1~y] 的异或值异或上 [1~x] 为0,那么 [x+1, y] 这段区间的异或值就为 0,可以 O(1) 判断一段区间异或值是否为 0。的,唯一减少花费的机会就是,将当前位置放到一段区间异或为 0 的区间将花费 -1。表示,前 i 个位置变为 0 的最小花费。...原创 2022-08-18 11:51:05 · 500 阅读 · 4 评论 -
C. And Matching(二进制,构造,思维)
C. And Matching题意:给定 n 和 m,保证 n 为 2 的幂次数。现在要找到 n2\frac{n}{2}2n 对关系 (ai,bi)(a_i, b_i)(ai,bi),保证 ∑i=1n/2ai&bi=m\sum_{i=1}^{n/2}{a_i \& b_i} = m∑i=1n/2ai&bi=m。输出这 n2\frac{n}{2}2n 对关系。无解输出 -1。(4≤n≤216,0≤k≤n−1).(4≤n≤2^{16}, 0≤k≤n−1).(4≤n原创 2022-01-28 21:45:01 · 740 阅读 · 0 评论 -
Bitwise Or vs LCM(思维,lcm,或运算)
题意:给定长度为 nnn 的数列 aaa,问是否存在一个二元组 (i,j)(i, j)(i,j) 满足:ai∣aj≥lcm(ai,aj)ai | aj ≥ lcm(ai, aj)ai∣aj≥lcm(ai,aj)。如果存在输出任一组,否则输出 -1。1≤n≤2×105,1≤ai≤1061\le n \le 2 \times 10 ^ 5,1 \le a_i \le 10 ^ 61≤n≤2×105,1≤ai≤106思路:首先:讨论对于 取或(|) 操作 x|y 的范围:因为二进制中的或操作如果两原创 2022-01-08 14:15:03 · 365 阅读 · 0 评论 -
牛客小\白月赛40——C 数字匹配(map,二进制)
题目链接题意:给定一个数n,求所有数对 x,y (1 ≤ x<y ≤ n) 的二进制中,满足非前导零部分最大连续重合位数 ≥ k 的数对个数。(n≤2000,k≤10)例如:175的二进制形式为(10101111),472472的二进制形式为(111011000),因此175175和472472最大连续重合部分为(1011),长度为4。思路:其实就是判断 两个字符串的最大连续重合长度 是否大于等于k。很容易发现:如果发现两个字符串的连续k个位置重合了,那么就是满足的。所以就是要判断这两个字符原创 2021-11-13 11:13:13 · 982 阅读 · 0 评论 -
CF1602.C. Array Elimination(逻辑运算&)
C. Array Elimination(逻辑运算&)题意:给出一组数,对于一个数k,每次可以选择k个位置进行若干次操作:k个位置上的数减去这k个数的与值。求出所有能够使得这组数都变为 0 的数 k。思路:要把所有数都变为0,也就是将所有数的数位变为0。每次操作,减去的是k个数的与值。所以,为了将一个数位变为0,减去的这个与值的该数位也要为0。为了让与值的该数位为0,那么挑选的k个位置上的数该数位都为1。因为可以操作若干次,所以对于一列数位的x个1来说,可以选择x的因子y个1,能够将原创 2021-10-26 23:09:29 · 354 阅读 · 0 评论 -
异或性质——前缀异或
昨天遇到一个非常神奇的事情,异或也能维护前缀?有两个例题:例一、子段异或描述:给出长度为n的数列,问 异或值为0的子段一共有多少?思路:之前有一个考前缀和的,求子段和为0的子段个数,做法是这样的:始终取前缀和,如果该位置的前缀和sum之前出现过,那么那次出现的位置到当前位置这一段总和为0。map存下sum出现的次数。遍历到当前位置,map[sum]便是以当前位置结尾的,子段和为0的子段个数。其实这道题也是这个思路:始终取前缀异或,如果当前位置的前缀异或sxor之前出现过,那么那次出现的位置原创 2021-10-10 00:15:54 · 3257 阅读 · 0 评论