博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷3812:【模板】线性基——题解
阅读量:6716 次
发布时间:2019-06-25

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

给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

我知道代码很简单,可是我一直在找一个理解性题解。

(我笨啊……)

这个人说的十分的好,下面引用他的话:(侵删)

首先考虑下面这个情况:

如果这n个数每个数的最高位的1的位置都不一样,我们就可以从高位向低位贪心选择取或者不取。

线性基就是把n个数选一些异或和出来化成这样一种情况:

对于当前这个数,选取它的最高位的1,看看线性基中有没有已经存入一个这样的数,如果没有存入,当然就把这个数存入,退出。

但是如果已经有了呢?可以发现线性基中存了的数一定是之前一些数的异或和,并且它的最高位的1也是同一位。那么我们把当前这个数异或上线性基存的这个数(显然结果还是一些数的异或和),自然这个最高位的1的位置就会变低,然后再丢回上一步重新考虑。

最后在这个线性基上做贪心就行了。

#include
#include
#include
#include
using namespace std;typedef long long ll;ll a[51];void insert(ll k){ for(int i=50;i>=0;i--){ if(k&(1LL<
=0;i--){ if(ans<(ans^a[i]))ans^=a[i]; } printf("%lld\n",ans); return 0;}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/8808084.html

你可能感兴趣的文章
代码管理(五)git 删除分支
查看>>
[学习笔记]Spring依赖注入
查看>>
网络虚拟化(SDN,NFV..)和企业骨干网的演化
查看>>
怎么确保站点的可用性
查看>>
我的第一个android应用——装逼神器《微博尾》
查看>>
[3] MQTT,mosquitto,Eclipse Paho---怎样使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?
查看>>
jsTree插件简介(三)
查看>>
[PHP] 通用网关接口CGI 的运行原理
查看>>
phoenixframe自己主动化平台在Linux环境下运行用例的说明
查看>>
Linux:sheel脚本for的用法,及日期参数+1day用法
查看>>
函数式编程
查看>>
spring boot mybatis没有扫描jar中的Mapper接口
查看>>
ijkPlayer 集成
查看>>
Python 文件 writelines() 方法
查看>>
背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素...
查看>>
图像滤镜艺术---Glow Filter发光滤镜
查看>>
create-react-app 引入 antd 及 解决 antd 样式无法显示的bug
查看>>
获取图形验证码
查看>>
Fresco-Facebook的图片加载框架的使用
查看>>
Android Runtime Stats
查看>>