位运算
yzyyylx
这个作者很懒,什么都没留下…
展开
-
CodeForces 845G
题面题意给出一张无向图,求从1-n的所有路径中的边权X-or最短路.做法可以从环上来考虑,如果有环,那么就一定可以0代价的异或这个环的权值,因此我们可以用dfs建出一棵搜索树,求出1到每个节点的距离,若找到环,则求出它与已经找到的环的异或最小值,非零则当作这个环的权值,记入已找到环的集合中,之后再求出1到n的距离与所有环的X-or最小值即可.代码#include<iostream> #include原创 2018-03-22 09:26:41 · 235 阅读 · 0 评论 -
线性基
作用用于处理多个数中选取一些数的Xor最大值,最小值,并且能否得到某个值.可以在log的时间解决实现方法是一个大小为log的,对于每一位记录一个最高位为它的某个数的数组,要求这个数组可以表示所有这些数的子集的Xor值,初始全部为零插入及查询插入数u时,从高位到低位遍历,如果u的这一位有值,则进行判断,若数组的这一位还没有数,则改为u并且break,否则u^数组中的这个数(详见代码),这样操作之后u只原创 2018-04-21 15:36:26 · 608 阅读 · 0 评论 -
CodeChef - TAPAIR Counting The Important Pairs
题面 题意 给出一张无向连通图,问去掉两条边后能将其分成多个连通块共有几种方法。 做法 建出dfs树后,发现一共有三种方法使它被分为多个连通块: 1.这两条边中有至少一条边是桥。 2.这两条边分别是仅被一条返祖边覆盖的树边和覆盖这条树边的返祖边。 3.被相同返祖边覆盖的两条树边。 对于第一种方法,只要统计出树边的数量即可,要注意和第三种方法的重合部分。 对于第二种方法,可...原创 2018-07-11 16:01:32 · 381 阅读 · 0 评论 -
AtCoder 3943 Two Sequences
题面 题意 给出两个序列a,b,每个序列中都有n个数,将它们两两相加,一共得到n^2个和,求这几个和的异或值。 做法 考虑逐位确定答案,首先可以发现a,b两数相加后,如果表示m的这位是1,那么令c=a%(m<<1),d=b%(m<<1),则m<=a+b<(m<<1)或a+b>=(m*3). 然后逐位考虑,将b序列模(m*2)后...原创 2018-08-08 07:44:08 · 198 阅读 · 0 评论 -
Codeforces 388D Fox and Perfect Sets
题面 题意 一个集合如果是完美的,则集合如果包含a,b,那么a^b也一定在这个集合内,求所有最大数小于等于n的集合数量。 做法 对于完美集合,我们可以发现一个线性基一定对应一个合法的完美集合,因此我们可以对线性基进行数位dp,因为一个完美集合可以对应多种线性基,所以可以通过高斯消元使其唯一,也就是说,对于一个经过高斯消元的线性基的每一位,如果它是某个基的最高位,则只有那一个基的这一位为1,反之任何...原创 2018-09-27 09:44:54 · 756 阅读 · 0 评论 -
Contest Hunter 3801 Rainbow的信号
题面 题意 给出nnn个数,随机rand两个1~n的数lll,rrr,若l&gt;rl&gt;rl>r,则交换两数,求区间[l,r][l,r][l,r]中的数异或,与,或的值的期望。 做法 首先因为是位运算,因此我们可以逐位考虑,对每一位单独计算,下面考虑第u+1u+1u+1位: 可以发现长度为1的区间被rand到的概率均为1/n/n1/n/n1/n/n,长度大于1的区间被r...原创 2018-11-03 19:23:35 · 199 阅读 · 0 评论 -
Codeforces 461D Appleman and Complicated Task
题面 题意 给出一个n∗nn*nn∗n的正方形,每个点为1或0,要求每个点周围的所有点之和为偶数,现在已经确定了几个点的数字,问一共有几种正方形满足条件。 做法 首先可以把周围四个数的和为偶数看作周围四个数的异或值为0,因此可以发现 (i,j)=(i−2,j)Xor(i−1,j−1)Xor(i−1,j+1)(i,j)=(i-2,j) Xor (i-1,j-1) Xor (i-1,j+1)(i,j)...原创 2019-01-02 23:26:15 · 210 阅读 · 0 评论