位运算
位运算
_hunxuewangzi
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 题目链接(位运算+组合数学)
题目链接题目大意给你d和m,构造一个数组a,使得a严格递增,使数组b(b1=a1,∀i>1,bi=bi−1⊕aib_1=a_1, ∀i>1,b_i=b_{i−1}⊕aib1=a1,∀i>1,bi=bi−1⊕ai)递增,问你构成a有几种可能,答案模上m题目思路这个题目主要是有两个关键点,一个要明白aia_iai化为2进制1的最高位一定比ai−1a_{i-1}ai−1高,还有就是组合数学的计算要理清,标称很好的解释了就不多说了代码#include<set>原创 2020-07-14 16:25:17 · 181 阅读 · 1 评论 -
Codeforces Global Round 8 D. AND, OR and square sum 题解(位运算)
题目链接题目大意给你长为n的a数组,你可以进行任意多次的操作,操作为选择a[i],a[j]使a[i]=a[i]|a[j],a[j]=a[i]&a[j].求题目思路显然无论怎么操作把他们转换为二进制后,二进制每一位对应的1的个数不变。直接把每个位的1算出来,然后分配,尽可能要大的数最大即可代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+5;int原创 2020-06-19 11:01:34 · 339 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2)E. Maximum Subsequence Value 题解(位运算)
题目链接题目大意给你一个数组大小不超过500的数组,要你找出子序列的最大价值。价值的定义为:假设你找了k个元素,把他们都化为二进制,如果在第i位有max(k-2,1)位1,那么价值就加上2^i。题目思路我是没什么思路的,从来没做过这类题目,长见识了。首先如果只有3个数以内,那么有在这个二进制中有一个1就行了。直接暴力枚举就行了。而如果有4个数或者以上,你会发现都是由3位以下转移来的。如果3个数得到的某位二进制为0,那么说明这三个数在这一位的二进制为0,则肯定不满足max(1,k-2),则这一位原创 2020-06-08 16:03:43 · 201 阅读 · 0 评论 -
Codeforces Round #644 (Div. 3) H - Binary Median 题解(二进制)
题目链接题目大意有一堆二进制数(01串,按字典序排序),从0到2^m-1 ,我们删除其中n(n<=100)个数,再输出这些数的中位数题目大意这个二进制化为十进制真的有点巧妙。。。可以观察其实,发现m最多为60就应该要思考化为十进制。因为是去除n个字符串,所以pos只能向右移动。这里只需要对n个字符串转换为十进制从小到大进行排序,然后如果有a[i]≤pos就右移动一位。这里从小到大排序是防止pos移动到删掉的字符串位置。ep:pos0=5,a1=6,a2=5。这里pos移动到6就停了。代码原创 2020-05-26 21:11:21 · 175 阅读 · 0 评论 -
牛客 每日一题 Xorto 题解(异或+前缀和)
题目链接题目大意选取任意不重叠的两个区间,使异或结果为0题目思路前言已经想到了用前缀和优化就是不知道该怎么判断他们不是重叠正文暴力是枚举两个区间左右端点,但是显而易见会tle,我们可以考虑只枚举其中一个区间[x,y],这个区间的异或和可以很容易的在O(1)时间复杂度通过前缀异或和求得。如果我们规定[x,y]是右边的那个区间,实际上我们需要知道的是,左边有多少个区间的异或和与[x,y]...原创 2020-04-21 15:33:32 · 212 阅读 · 0 评论 -
牛客小白月赛22 C 交换游戏(记忆化搜索+位运算+状态压缩)
题目链接题目大意看了好久都没看懂题目意思是啥。。。有12个孔,有些孔上面有障碍。若如果相邻的三个孔有两个孔被遮挡,并且被遮挡的两个孔相邻,则可以将中间的障碍拿掉,并将一端的遮挡物移到另一端没有被遮挡的孔上面。简单来说:将这三个孔的状态反转。例如记x为障碍遮住的孔,o为未遮住的孔 oxx -> xoo,xxo -> oox题目思路如果看懂了题目的话,这个题看一眼数据范围显然...原创 2020-04-08 15:45:31 · 381 阅读 · 0 评论 -
牛客练习赛60 A 大吉大利 题解(位运算)
题目链接题目大意题目思路首先上一个暴力代码(会t)了解一下题目#include<cstdio>using namespace std;typedef long long ll;const int maxn=1e5+5;int n,a[maxn];ll ans;int main(){ scanf("%d",&n); for(int i=1;i...原创 2020-04-02 12:51:37 · 228 阅读 · 0 评论 -
Codeforces 1325 D. Ehab the Xorcist (异或)
题目链接题目大意给出一个 u 和一个 v ,要求构造出最短的一个数组,使得所有元素异或的结果为 u,所有元素之和的结果为 v。注意输入为 long long题目思路看到此题我一点思路都没有最近写题目感觉有一个规律,如果数据开到long long那么基本都是分类讨论。因为元素范围多,所以时间复杂度,我觉得基本都是o(1)o(log(n))的复杂度我还没见过正题首先先了解一个知识点:...原创 2020-03-19 20:25:02 · 178 阅读 · 0 评论 -
周赛 区间异或 题解(找规律)+异或知识讲解
一:异或的含义或在数学中的含义:一个元素在集合A中或在集合B中,或的维恩图如下:而异或是不允许共存的,所以 A ^ B 的维恩图如下:同理对于 A ^ B ^ C 维恩图:...原创 2020-03-15 17:42:06 · 746 阅读 · 0 评论