[洛谷3812]【模板】线性基
题目大意:
给你n个数,求这些数能异或出的数的最大值。
思路:
线性基模板。
b中的数满足对于每个b[i],最高位在第i位。
构造方法就是对于每个数字,从高到低枚举每一个1,如果这一位对应的b[i]还没有,就把这个数作为b[i],如果有,就把这个数异或上b[i]。
考虑两个数a,b,它们能异或出来的数为0,a,b,a xor b,如果把b换成a xor b,它们能异或出来的数还是0,a,b,a xor b。
所以b能异或出来的值域和a能异或出来的值域相同。
最后能异或出的最大值可以用类似贪心的思想。
从高到低枚举每个数,如果和现在的ans异或起来比ans大那么就异或,不然就不管。
这样就能优先保证更高的位出现在答案中,也就可以保证ans最大。
1 #include<cstdio> 2 #include<cctype> 3 #include<algorithm> 4 typedef long long int64; 5 inline int64 getint() { 6 register char ch; 7 while(!isdigit(ch=getchar())); 8 register int64 x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); 10 return x; 11 } 12 const int N=51; 13 int64 b[N]; 14 int main() { 15 const int n=getint(); 16 for(register int i=0;i<n;i++) { 17 int64 x=getint(); 18 for(register int i=N-1;~i;i--) { 19 if(!(x&(1ll<<i))) continue; 20 if(!b[i]) { 21 b[i]=x; 22 break; 23 } else { 24 x^=b[i]; 25 } 26 } 27 } 28 int64 ans=0; 29 for(register int i=N-1;~i;i--) { 30 ans=std::max(ans,ans^b[i]); 31 } 32 printf("%lld\n",ans); 33 return 0; 34 }
转载于:https://www.cnblogs.com/skylee03/p/7807815.html
[洛谷3812]【模板】线性基相关推荐
- 线性筛法 欧拉筛c语言,[洛谷P3383][模板]线性筛素数-欧拉筛法
Hibernate Hql 总结 1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
- 强连通分量:洛谷P3387 模板:缩点
传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...
- 【后缀数组】洛谷P3809模板题
题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...
- 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)
https://www.luogu.com.cn/problem/P1919 题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a ...
- 洛谷 p3372 模板-线段树 1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...
- 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)
题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...
最新文章
- android studio 库项目,Android Studio 发布项目到jcenter库
- 上交大博士生:博三经历5轮审稿被拒后,如今发10篇论文成为审稿人
- 这38个小技巧告诉你如何快速学习MySQL数据库
- 各浏览器对document.getElementById等方法的实现差异
- SpringBoot应用的集成测试
- 关于Android的HAL的一些理解
- Linux 常用的软件包管理器/软件包管理工具
- 搜索引擎优化学习原理_如何使用数据科学原理来改善您的搜索引擎优化工作
- 如何在Ubuntu 14.10 上安装WordPress?
- 【论文写作】课程指导平台的开发中界面设计如何写
- Matlab实用代码——直方图的绘制并在单个直方图上标注对应数字
- mysql5.7 keepalived_基于MySQL 5.7多源复制及Keepalived搭建三节点高可用架构
- 尼日利亚4g频段_4G全球频段划分及主要运营商对应表2015版
- c语言oct,【讨论】OCT扫描中的C-scan你知道吗????????
- 《2022,自我增值的7个好习惯》读书笔记
- 变电站3D仿真实训系统的特色及优势
- 德国计算机课程匹配度,匹配度对于德国留学有多重要
- ipython出现键盘输入错乱问题
- 清华大学计算机系教授武汉理工大学,武汉理工大学
- C#.Net干货分享-构建Aocr_ImageHelper读取图片文字做解析