洛谷 [P3812] 线性基】的更多相关文章

异或空间下的线性基模版 异或空间下求线性基,本质还是高斯消元,参见 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8562924.html 求最大值是一个贪心的过程,从高位到低位,如果异或起来可以更大,就异或 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #defi…
P3812 [模板]线性基 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. code: #include <iostream> #include <cstdio> using namespace std; #define int long long inline int read(){ int sum=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=ge…
学了下线性基 使用好像并不复杂 打了板子 但是要注意位运算优先级 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; ; ],a[],n; void getbase(void){ ;i<=n;i++){ ;j--){ if(a[i]>>j){ if(!base[j]){ base[j]=a[i]; bre…
题目传送门 线性基 题目描述 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. 输入输出格式 输入格式: 第一行一个数n,表示元素个数 接下来一行n个数 输出格式: 仅一行,表示答案. 输入输出样例 输入样例#1: 2 1 1 输出样例#1: 1 说明 $1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50}$ 分析: 一道线性基模板.<不会线性基的看这里> 直接构造线性基然后贪心选取异或得到最大答案即可. Code: #include…
题目背景 这是一道模板题. 题目描述 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. 输入输出格式 输入格式: 第一行一个数n,表示元素个数 接下来一行n个数 输出格式: 仅一行,表示答案. 输入输出样例 输入样例#1: 复制 2 1 1 输出样例#1: 复制 1 说明 1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50}1≤n≤50,0≤Si​≤250 首先对这$n$个数建出线性基 然后贪心的选最大就好 线性基..感觉又开了个天坑…
传送门 代码中体现在那个 $ break $ $ prime $ 数组 中的素数是递增的,当 $ i $ 能整除 $ prime[j ] $ ,那么 $ iprime[j+1] $ 这个合数肯定被 $ prime[j] $ 乘以某个数筛掉. 因为i中含有 $ prime[j] $ , $ prime[j] $ 比 $ prime[j+1] $ 小.接下去的素数同理.所以不用筛下去了. 在满足 $ i%prme[j]==0 $ 这个条件之前以及第一次满足改条件时, $ prime[j] $ 必定是…
我们一般写的埃氏筛消耗的时间都是欧拉筛的三倍,但是欧拉筛并不好想(对于我这种蒟蒻) 虽然 -- 我 -- 也可以背过模板,但是写个不会的欧拉筛不如写个简单易懂的埃氏筛 于是就有了优化 这个优化还是比较厉害的,能把埃氏筛的消耗的时间提的跟欧拉筛差不多 以下内容需要先学会埃氏筛 学会的埃氏筛就明白它的原理了吧 #include<bits/stdc++.h> using namespace std; int n, m ,Is_p[10000001]; int main() { cin >>…
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\)的.(这就有\(70\)分?) 因为最开始的图是连通的,可以先求一个\(dis[i]\)表示\(1\)到\(i\)的异或和.每次加边会形成环,就是在线性基中插入一个元素. 因为有撤销,所以线段树分治就好了.线段树上每个节点开一个线性基.同一时刻只需要\(\log\)个线性基的空间. 复杂度\(O(\…
洛谷传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 题意: 给你n个数,每个数<=70,问有多少个集合,满足集合中所有数相乘是个完全平方数(空集除外) 题解: 完全看不出这玩意儿和线性基有什么关系……我可能太菜了…… 首先,一个完全平方数分解质因数之后每个质因子都出现偶数次 又因为小于等于$70$的质数总共18个,可以用18位的二进制表示,0表示偶数次,1表示奇数次 那么两个数相乘就是每一个质因子表示的位的异或 那么就是求有多少种方法相乘得0 首先求出原数组的线性基,设$cnt$表示线性基内…
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线性基的所有异或和都不为零.因此维护一个线性基,每次插入编号 \(i\),如果 \(i\) 与之前的线性基都线性无关,也就是能插入,就插入并将魔力值累加到 \(ans\). #include <bits/stdc++.h> using namespace std; typedef long long…