
位运算
CHCXCHC
这个作者很懒,什么都没留下…
展开
-
hdu 5413 CRB and Roads 位运算优化复杂度
题意:给一个包含n个点m条边的无环单向简单图,然后问有多少条多余边。((u,v)(u,v)是多余边当且仅当u−>vu->v不经过(u,v)(u,v)这条边。)都说了是无环单向图。因此很容易想到拓扑排序:对于当且点u,如果存在(u,v)(u,v),v可以由u通过另一条路径到达,那么(u,v)(u,v)这条边就是多余边,但是这样暴力下来复杂度大概是O(n∗(n+m))O(n*(n+m)),然后再乘以一个原创 2015-08-25 20:38:39 · 1325 阅读 · 0 评论 -
Codeforces Round #318 (Div. 2) B. Bear and Three Musketeers 位运算压缩
题意:有n个人,m组关系。现在想要从这n个人中选3个人。这3个人必须满足的条件:1)这3个人必须相互认识 2)这3个人的识别度的总和最小(一个人的识别度为:除了另外两人认识的人的数,三个人的识别度相加最小) 如果存在,则输出识别度总和最小的那个值,如果不存在,则输出-1位运算压缩,将一个点能直接相连的其他点都压缩,然后直接枚举点,然后通过点枚举边,判断共同点就可。 复杂度O(nm)O(nm)//原创 2015-09-09 22:50:49 · 565 阅读 · 0 评论 -
UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
题意:给定一个9*9的数独,要求判断是否为简单数独。 数独:对于每一行每一列或者子方格内,只能填1~9这几个数,并且每个数字只能出现一次,比如说: 如果一个9*9的数独是简单数独的话,这个数独的解是独一无二的 也就是说,每次可以推导出一个点,这个点的值是确定的,直到数独被填满。 对于下图,x只能填2 对于下图,x只能填1 判断数独是否是简单数独。如果是输出1,不是输出0.这道原创 2015-09-25 23:34:27 · 995 阅读 · 0 评论 -
UVALive 6283 Great Deceiver 思考题
题意:给定一个n和k,求所有小于等于n的数中k进制和-k进制的值相等的有多少个组合使得xk==x−kx_k==x_{-k} xk=a0∗k0+a1∗k1+...+ar∗krx_k=a_0*k^0 + a_1*k^1 + ... + a_r*k^r x−k=a0∗(−k)0+a1∗(−k)2+...+ar∗(−k)rx_{-k}= a_0*(-k)^0 + a_1*(-k)^2 + ... + a原创 2015-10-09 23:38:44 · 942 阅读 · 0 评论 -
UVALive 6284 Hyperdrome 位运算+has
题意:给一个长度为3∗1053*10^5的字符串,判断有多个子串[l,r][l,r]重新排列之后可以是回文串因为字符是′a′−′z′'a'-'z'以及′A′−′Z′'A'-'Z',那么我们可以用一个long long的二进制来标示某个区间该字符出现的次数,如果为奇数对应位则为1,如果为偶数则对应位为0。显然,如果该区间的字符可以重新排列组成回文串,那么该区间内1的个数<=1。 以上,以下。 假设原创 2015-10-09 23:22:32 · 737 阅读 · 0 评论 -
UVALive 6067 Bit Magic 通过三个位运算约束求是否有解 2-sat
有如下的代码: 现在给定b[N][N],求是否存在a[N]void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i % 2 == 1 &&原创 2015-10-11 09:32:45 · 703 阅读 · 0 评论