首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
bitset 线性基
2024-07-31
[THUSC2017]杜老师:bitset+线性基
算法一(50pts) 分析 有一个很显然的暴力做法,对于区间内的每个数开个bitset,然后暴力分解质因数.如果对于一个数,它的一个质因子的指数是奇数,那么就把bitset的对应位设成\(1\).答案就是异或方程组解的个数,也就是\(2^{fail}\),\(fail\)表示向线性基插入失败的数的个数. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i<=(b);++i) #define iri
LOJ 2978 「THUSCH 2017」杜老师——bitset+线性基+结论
题目:https://loj.ac/problem/2978 题解:https://www.cnblogs.com/Paul-Guderian/p/10248782.html 第 i 个数的 bitset 的第 j 位表示 i 是否含有奇数个 “第 j 个质数” . 想到用 bitset ,就开始考虑怎样 DP …… 其实是求选一些数,使得它们的 bitset 异或和为 0 .所以求线性基,答案就是 2R-L+1-线性基大小 . 然后考虑根号分治. 大于 \( \sqrt{n} \) 的质数,每
洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\)的.(这就有\(70\)分?) 因为最开始的图是连通的,可以先求一个\(dis[i]\)表示\(1\)到\(i\)的异或和.每次加边会形成环,就是在线性基中插入一个元素. 因为有撤销,所以线段树分治就好了.线段树上每个节点开一个线性基.同一时刻只需要\(\log\)个线性基的空间. 复杂度\(O(\
LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直接是 dis[ u ] ^ dis[ v ] ^ w[ i ] 就行了(其中 u , v 是边的两端, i 是边的标号). 再看一下题,发现一开始一定是连通的.所以剩下的就和 bzoj 4184 shallot 一样用线性基就行了. 因为有 1000 位,所以用 bitset . 线性基求最大值原来
BZOJ 1923 外星千足虫(bitset优化线性基)
题意:给出m次n个千足虫的足数信息,确定在第几次测试后可以确定每个千足虫的来历. 我们可以观察到每个测试结果具有异或后依然成立的性质,于是实际上我们只需要从头到尾确定有n个线性相关的向量是在哪一个测试后出现. 也就是说,直到出现了n个线性基,此方程的自由变元的数量才为0,此方程才有唯一解. 所以,依次将每个二进制数加入线性基,动态维护线性基中基的数量以及基的信息,直到基的个数变为n,输出答案. 由于二进制位数达到了1000位,于是用bitset优化,可以使得该题O(m*n^2)只需要360ms即
Wannafly Winter Camp 2020 Day 5J Xor on Figures - 线性基,bitset
有一个\(2^k\cdot 2^k\) 的全零矩阵 \(M\),给出 \(2^k\cdot 2^k\) 的 \(01\) 矩阵 \(F\),现在可以将 \(F\) 的左上角置于 \(M\) 的任一位置(超出部分就循环,\(2^k\) 的下一个就是 \(1\)),然后相应位置相异或.现在可以执行任意次以上操作:将 \(F\)放于某个位置,执行对应的异或操作.问最后不同的 \(M\)有多少个. Solution 很显然我们可以 \(F\) 放在每一个位置的异或结果都算出来,放在一起,变成一个集合,那
高斯消元 & 线性基【学习笔记】
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017-02-19]加入线性基 [update 2017-03-31]完善内容,改用markdown Gauss Elimination 高斯消元(Gaussian elimination)是求解线性方程组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵的逆矩阵. 它通过逐步消除未知数来将原始线性系统转化为另一个更
BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]
2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x个是谁 求出线性基后我们知道一共有$2^r$个不同的数,再知道每个数出现了几次就好啦 每个数出现了$2^{n-r}$次....因为有$n-r$个线性相关(高斯消元后全0了)的方程异或不影响.... 然后就简单了,从高到低枚举二进制位,异或这一位后小于k就加上 #include <iostream>
BZOJ 4269: 再见Xor [高斯消元 线性基]
4269: 再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 我太愚蠢了连数组开小了以及$2^{31}$爆$int$都不造 线性基裸题啊.... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #in
HDU 3949 XOR [高斯消元XOR 线性基]
3949冰上走 题意: 给你 N个数,从中取出若干个进行异或运算 , 求最后所有可以得到的异或结果中的第k小值 N个数高斯消元求出线性基后,设秩为$r$,那么总共可以组成$2^r$中数字(本题不能不选,所以$2^r -1$) 然后如果$k \ge 2^r$就不存在啦 否则一定可以有$k$小,因为现在$1..r$行每行都有一位是1(左面是最高位) 从高到低枚举k的二进制,如果是1就异或上对应的行就行了,最后就是k小值啦 #include <iostream> #include <cstdi
BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高斯消元判断是否和已选择的线性相关 每一位记录pivot[i]为i用到的行 枚举要加入的数字的每一个二进制为1的位,如果有pivot[i]那么就异或一下(消元),否则pivot[i]=这个数并退出 如果最后异或成0了就说明线性相关... #include <iostream> #include &l
BZOJ_4269_再见Xor_线性基
BZOJ_4269_再见Xor_线性基 Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整数N. 接下来一行N个非负整数. Output 一行,包含两个数,最大值和次大值. Sample Input 3 3 5 6 Sample Output 6 5 HINT 100% : N <= 100000, 保证N个数不全是0,而且在int范围内 高斯消元求线性基. 线性基有如下性质:
BZOJ_2460_[BeiJing2011]元素_线性基
BZOJ_2460_[BeiJing2011]元素_线性基 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而 使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制 出法杖,这个现象被称为“魔法抵消” .特别地,如果在炼制过程中使用超过 一块同一种矿石,那么一定会发生“魔法抵消”.
loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)
题意 题目链接 Sol 线性基+线段树分治板子题.. 调起来有点自闭.. #include<bits/stdc++.h> #define fi first #define se second #define pb push_back #define bit bitset<B + 1> using namespace std; const int MAXN = 501, B = 1001, SS = 4001; inline int read() { char c = getchar
【UOJ453】【集训队作业2018】围绕着我们的圆环 线性基 DP
题目大意 有一个 \(n\times k\) 的 01矩阵 \(C\),求有多少个 \(n\times m\) 的矩阵 \(A\) 和 \(m\times k\) 的矩阵 \(B\),满足 \(A\times B=C\).系数对 \(2\) 取模. 还有 \(q\) 次操作,每次会修改 \(C\) 中一行的值. 要对每次修改后的矩阵计算答案. \(n,m,k,q\leq 1000\). 题解 可以发现,答案只跟 \(C\) 的秩有关.因为如果我们对 \(C\) 做行变换或列变换,那么就可以对 \
BZOJ4269再见Xor——高斯消元解线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两个数,最大值和次大值. 样例输入 3 3 5 6 样例输出 6 5 提示 100% : N <= 100000, 保证N个数不全是0,而且在int范围内 求异或最大值和严格次大值,最大值直接用线性基求即可,因为用高斯消元求出的线性基直接将所有线性基异或在一起就是最大值,所以只需要把其中最小的一个
【luogu3733】【HAOI2017】 八纵八横 (线段树分治+线性基)
Descroption 原题链接 给你一个\(n\)个点的图,有重边有自环保证连通,最开始有\(m\)条固定的边,要求你支持加边删边改边(均不涉及最初的\(m\)条边),每一次操作都求出图中经过\(1\)号点的环的抑或值的最大值,每个节点或边都可以经过多次(一条路经过多次则会被计算多次). Solution \(~~~~\)好久都没发过博客了一定是我改题如蜗牛哎.对于每一次操作都要输出答案,考虑用线段树分治离线.先在图中随便弄出一颗以\(1\)为根的生成树,若之后再加了一条边\((u, ~v)~
BZOJ4671 异或图(容斥+线性基)
题意 定义两个结点数相同的图 \(G_1\) 与图 \(G_2\) 的异或为一个新的图 \(G\) ,其中如果 \((u, v)\) 在 \(G_1\) 与 \(G_2\) 中的出现次数之和为 \(1\) , 那么边 \((u, v)\) 在 \(G\) 中, 否则这条边不在 \(G\) 中. 现在给定 \(s\) 个结点数相同的图 \(G_{1...s}\) , 设 \(S = {G_1, G_2, \cdots , G_s}\) , 请问 \(S\) 有多少个子集的异或为一个连通图? \(n
【Luogu3733】[HAOI2017]八纵八横(线性基,线段树分治)
[Luogu3733][HAOI2017]八纵八横(线性基,线段树分治) 题面 洛谷 题解 看到求异或最大值显然就是线性基了,所以只需要把所有环给找出来丢进线性基里就行了. 然后线性基不资磁撤销?线段树分治,没了. #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<bitset> using namespace std; #define
Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)
题目链接 \(Description\) 给定一个\(n\times m\)的\(01\)矩阵.求任意选出\(r\)行.\(c\)列(共\(2^{n+m}\)种方案),使得这\(r\)行\(c\)列的交的位置的\(r\times c\)个数的和为奇数,的方案数有多少. (...我也不知道怎么就表述成这样了,反正挺好理解) \(n,m\leq300\). \(Solution\) 假设已经确定了选择某些行,然后把每一行\(m\)个数看做一个\(m\)位二进制数. 如果这些行异或和为\(0\),那怎
热门专题
python行高列宽
lenet-5训练MNIST keras
xcode清除证书缓存
spring cloud搭建版本号关系
<img src="图片地址">是绝路径
android studio真机运行登陆界面跳转闪退
sedmail 乱码
vue3.0 配置不同环境
maven打包去掉test
C# linq 传递 属性 名称
学习pandas的不解
Idea编译 指定profile
mysftp权限控制
在IDEA中设置命令行参数的作用是什么
有来商城 如何 配置
js元素跟随鼠标移动
Spring boot无侵入接口文档
nginx反向代理后静态资源404
.net core 实现多语言 切换
iOS的前台、后台、中间