HDU 3949 XOR】的更多相关文章

目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数直接异或得到第k大 对于一列由多个1的,由于二进制性质,由于2的幂+1次方比2的(1到幂)的和要大,所以不影响大小 代码 #include<queue> #include<cstdio> #include<cstring> #include<algorithm>…
HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第k大的 思路:高斯消元搞基,然后从低位外高位去推算 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的值都求出来,对于这个规模的n是不可行的. 然后之前有过类似的题,求最大的,有一种方法用到了线性基. 那么线性基能不能表示第k大的呢? 显然,因为线性基可以不重复的表示所有结果.它和原数组是等价的. 对于一个满秩矩阵 100000 010000 001000 000100 000010 000001…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排序得到B.给出一个数K,询问在B中第K个数字是多少? 思路:首先看做n个二进制的数字进行高斯消元,得到k个线性无关的数字.然后由这k个线性无关的数字得到第K个数字.这里不能选择空集,因此对于B中是否存在0要进行特判. #include <iostream>#include <cstdio&g…
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题目中可以出现异或和为0的情况,但线性基里是不会出现异或和为0的情况,所以我们需要多处理下,将数字全插入到线性基中,如果无法插入也就代表会出现异或和为0的情况,那么求第k小就应该变成求线性基中第k-1小. 实现代码: #include<bits/stdc++.h> using namespace s…
http://acm.hdu.edu.cn/showproblem.php?pid=3949 求异或第k小,结论是第k小就是 k二进制的第i位为1就把i位的线性基异或上去. 但是这道题和上一道线性基不同的地方是要缩一下位使得k的每一位都有线性基(毕竟是组合为基础的). 要在往里塞线性基的时候把每个线性基上的1能往后放的尽量往后放emmm这么搞非常重要,以后写线性基都加一下这个可以处理的东西更多了. (这个东西维护之后,线性基中所有数都变为二进制的话那么每个二进制位上至多有一个1) 这道题不能取空…
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…
3949 思路: 线性基,线性基的每个元素尽可能小 将k转换成二进制与排好序的线性基相对应 如果线性基的个数小于n,说明n个元素线性相关,所以可以构成0,k要减1 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi…
题目大意:给定一个数组,求这些数组通过异或能得到的数中的第k小是多少 首先高斯消元求出线性基,然后将k依照二进制拆分就可以 注意当高斯消元结束后若末尾有0则第1小是0 特判一下然后k-- 然后HDU输出long long是用%I64d 不管C艹还是G艹都是 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 10100 using namesp…
 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3525    Accepted Submission(s): 1212 Problem Description XOR is a kind of bit operator, we define that as follow: for two binary base number A a…