博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3949 XOR (线性基第k小)题解
阅读量:4322 次
发布时间:2019-06-06

本文共 1497 字,大约阅读时间需要 4 分钟。

题意:

给出\(n\)个数,求出子集异或第\(k\)小的值,不存在输出-1。

思路:

先用线性基存所有的子集,然后对线性基每一位进行消元,保证只有\(d[i]\)\(i\)位存在1,那么这样变成了一组基线性基,然后按\(k\)的二进制找地k小。因为线性基不保存0,所以对有0的情况要进行特判。

代码:

#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;const int maxn = 1000 + 5;const int INF = 0x3f3f3f3f;const ll MOD = 1e9 + 7;struct Liner_Basis{ ll d[63], nd[63]; int tot, flag; void init(){ memset(d, 0, sizeof(d)); memset(nd, 0, sizeof(nd)); tot = flag = 0; } bool insert(ll x){ for(int i = 62; i >= 0; i--){ if(x & (1LL << i)){ if(d[i]) x ^= d[i]; else{ d[i] = x; return true; } } } flag = 1; return false; } void rebuild(){ for(int i = 62; i >= 0; i--){ if(d[i] == 0) continue; for(int j = i - 1; j >= 0; j--){ if(d[i] & (1LL << j)) d[i] ^= d[j]; } } for(int i = 0; i <= 62; i++){ if(d[i]) nd[tot++] = d[i]; } } ll kth_min(ll k){ if(flag) k--; if(k == 0) return 0; if(k >= (1LL << tot)) return -1; ll ret = 0; for(int i = 62; i >= 0; i--){ if(k & (1LL << i)){ ret ^= nd[i]; } } return ret; }}lb;int main(){ int T, ca = 1; scanf("%d", &T); while(T--){ int n; ll x; scanf("%d", &n); lb.init(); for(int i = 1; i <= n; i++){ scanf("%lld", &x); lb.insert(x); } lb.rebuild(); int q; scanf("%d", &q); printf("Case #%d:\n", ca++); while(q--){ scanf("%lld", &x); printf("%lld\n", lb.kth_min(x)); } } return 0;}

转载于:https://www.cnblogs.com/KirinSB/p/11236453.html

你可能感兴趣的文章
读取本地json文件,解析json
查看>>
【学习】循环语句1027
查看>>
Git提交代码报错Git push error:src refspec XXX matches more than one解决方案
查看>>
软件设计规格说明书
查看>>
bzoj 1500: [NOI2005]维修数列 -- splay
查看>>
设计模式 - 简单工厂
查看>>
数组与指针杂记
查看>>
四色原理
查看>>
Codeforces Round#500 Div.2 翻车记
查看>>
再更新ww的mingw MinGW-full-20101119
查看>>
Benefit UVA - 11889
查看>>
全排列 最详细的解题报告
查看>>
c++ web服务器
查看>>
android机型排行榜(201509)
查看>>
eclipse + maven + scala+spark环境搭建
查看>>
jmeter中webdriver插件,进行自动化压测
查看>>
整站开发初始化
查看>>
洛谷P2900 [USACO08MAR]土地征用Land Acquisition(斜率优化)
查看>>
uoj#448. 【集训队作业2018】人类的本质(Min_25筛+拉格朗日插值)
查看>>
vim配置及插件安装管理(超级详细)
查看>>