求异专题

To xor or not to xor 高斯消元求异或

【题目】 给你n个long long范围内的整数,你可以选取1个或多个数进行异或操作,使得结果最大,求最大的结果。 【题目分析】 真是一道好题,不是真正理解高斯消元是无法做这题的。 题意:给你n个数,可以选择任意个数异或,但是要使得最后的异或值最大。 我们把每个数用二进制表示,要使得最后的异或值最大,就是要让高位尽量为1,高位能不能为1就必须用高斯消元判断了。 1. 根据数的二进制表示,建立

01字典树求异或最大值与最小值模板(带删除)

异或求最小值模板 #include <bits/stdc++.h> using namespace std; const int maxn=300005; int n,m; int a[maxn],b[maxn]; int ch[30*maxn][2]; int val[30*maxn]; int sz; void insert(int num){ int u=

Zhu and 772002 HDU - 5833 (高斯消元求异或方程组解的个数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5833 题目描述:给定n个数,每个数所含质因子最大不超过2000,选取任意个(至少为1个)数字相乘,要求所得乘积为完全平方数,求共有多少种选取方案。 思路:题目都已经说每个数所含最大质因子不超过2000了,很明显是要分解质因子求解,求的2000以内的素数共303个。要想相乘组成完全平方数,只要所选取

Find MaxXorSum 经典字典树求异或最大值(数据量大)

题目:https://cn.vjudge.net/problem/NBUT-1597 [1597] Find MaxXorSum 时间限制: 2000 ms 内存限制: 65535 K问题描述 Given n non-negative integers, you need to find two integers a and b that a xor b is maximum. xor is