题目大意:给定一个n个数的集合S和一个数x,求x在S的2^n个子集从大到小的异或和序列中最早出现的位置
有学长真好不用自己打题目大意了233
首先我们求出线性基 我们会得到一些从大到小排列的数和一堆0 记录0的个数
不考虑0,看前面的数,由于线性基的性质,我们直接贪心从大到小枚举 若当前异或和异或这个值小于Q则取这个数 (注意^不要写成+或者| 本蒟蒻已经因为这个WA了两道题了
然后我们通...
分类:
其他好文 时间:
2014-10-06 19:14:50
阅读次数:
174
题目大意:给定一个无向图,每条边上有边权,求一条1到n的路径,使路径上权值异或和最大
首先一条路径的异或和可以化为一条1到n的简单路径和一些简单环的异或和
我们首先DFS求出任意一条1到n的简单路径以及图中所有最简单的简单环(环上不存在两个点可以通过环外边直连)
然后在一些数中选出一个子集,使它们与一个给定的数的异或和最大,这就是高斯消元的问题了
利用高斯消元使每一位只存在于最多一个数上 ...
分类:
其他好文 时间:
2014-10-05 19:09:08
阅读次数:
194
这是是一道可持久化数据结构题。具体分类不明按二进制位建立一颗可持久化树:因为每个节点都有两个儿子,于是非常像线段树,但是其实本质又是trie,于是就叫它可持久化trie吧。。。每次新家点的时候就在trie里加一条链,然后查询用贪心方法查即可。 1 /*************************...
分类:
其他好文 时间:
2014-10-03 23:27:45
阅读次数:
357
首先对于一棵树,如果要求点u->v路径上的边权值的1的个数为奇数的话,相当与异或和为一,而u->v的值始终与1->u xor 1->v 相等有了这个性质之后,直接选一个点为根,dfs遍历整颗树,就可以求出根节点到其他所有节点路径上的异或和了。然后题目所要求的方案数相当与从所有为0的路径中和所有为1的...
分类:
其他好文 时间:
2014-09-23 22:38:15
阅读次数:
262
每个数想要得到最大的异或值,就肯定是在二进制上是互补的,所以暴力找出互补的数。
#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
int a[110000];
int n;
int link[110000];
int bit(int n)
{
...
分类:
其他好文 时间:
2014-09-15 17:45:49
阅读次数:
197
给n个数
求异或前缀(从前连续取一些数全作异或)和异或后缀(从后连续取一些数全作异或)异或的最大值
好坑啊,指针好坑啊
第一道trie树
简单说下解法(其实壳还是不深):
先异或所有数作为初始后缀
然后从前往后的数逐个从后缀出来,进入前缀,
在这个过程中,都把当前前缀变成二进制压入trie,然后当前后缀变成二进制从高位到低位尽量取和它数位不同的值,沿着trie往下走,得到一个最好...
分类:
其他好文 时间:
2014-09-09 13:11:40
阅读次数:
278
UVA 1566 - John
题目链接
题意:给定n堆糖果,每次取一堆任意个数,取到最后一个的输
思路:anti-Nim,推导出来就是如果全为1,判断1的奇偶,如果不为1,就和Nim问题是一样的,判断异或和
代码:
#include
#include
int t, n;
bool solve() {
scanf("%d", &n);
int ...
分类:
其他好文 时间:
2014-08-06 14:54:51
阅读次数:
394
HDU 4901 The Romantic Hero
题目链接
题意:给定一个序列,要求找一个分界点,然后左边选一些数异或和,和右边选一些数且和相等,问有几种方法
思路:dp,从左往右和从右往左dp,求出异或和且的个数,然后找一个分界点,使得一边必须在分界点上,一边随意,然后根据乘法原理和加法原理计算
代码:
#include
#include
typedef ...
分类:
其他好文 时间:
2014-08-01 00:00:10
阅读次数:
363
给定两个整数:L 和 R? L ≤ A ≤ B ≤ R, 找出 A xor B 的最大值。输入格式第一行包含 L 第一行包含 R数据范围1 ≤ L ≤ R ≤ 103输出格式输出最大的异或和题解: 1 import java.io.*; 2 import java.util.*; 3 import ...
分类:
其他好文 时间:
2014-07-29 17:28:42
阅读次数:
247
HDU 4876 ZCC loves cards
题目链接
题意:给定一些卡片,每个卡片上有数字,现在选k个卡片,绕成一个环,每次可以再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个L,问能组成[L,R]所有数字的情况下,R的最大值是多少
思路:暴力C(20, 6),然后对于每个序列去全排后模拟计算值, 不过之前要有个剪枝,全排前,先把k个数随机取数(即不用连续)...
分类:
其他好文 时间:
2014-07-24 23:01:33
阅读次数:
187