【题解】LOJ6060 Set(线性基)
2024-10-08 03:43:54
【题解】LOJ6060 Set(线性基)
orz gql
设所有数的异或和为\(S\),答案是在\(\max (x_1+S\and x_1)\)的前提下\(\min x_1\)输出\(x_1\)
转换一下就是\(\max (x_2+S\and x_2),s.t. \max x_2\)
考虑先贪心地求出外层\(\max\)
按位贪心,设\(u_i\)为\(S\)第\(i\)位上的\(bit\) ,\(u_i\)是个\(0/1\)变量
- \(u_i=1\)时,对于\(x_2\)这一位我们没有任何要求,因为无论\(x_2\)该位上的取值,外层\(\max\)不变。
- \(u_i=0\)时,对于\(x_2\)这一位我们要求能有\(bit\)就有\(bit\) ,这样可以对答案有\(2\times 2^i\)贡献。
由于满足要求的\(x_2\)有很多,我们现在要找到最大的那种,就直接线性基套进去就好了。具体实现代码带注释,文字太难说明了!
相当于复读gql的代码了
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std; typedef long long ll;
inline ll qr(){
register ll ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=1e5+5;
ll data[maxn];
ll base[66];
ll num[66];
ll n,S;
inline void insert(ll x){
for(register int t=63;t;--t)
if(!(S&num[t])&&(x&num[t])){
if(!base[t]) return void(base[t]=x);
x^=base[t];
}
//假如当前元素可以按照条件一的条件插入,就return了,运行下面的代码是条件二
for(register int t=63;t;--t)
if((S&num[t])&&(x&num[t])){
if(!base[t]) return void(base[t]=x);
x^=base[t];
}
}
inline ll top(){
ll ret=0;
//构造满足条件一二
for(register int t=63;t;--t)
if(!(S&num[t])&&!(ret&num[t])) ret^=base[t];
//构造x最大
for(register int t=63;t;--t)
if( (S&num[t])&&!(ret&num[t])) ret^=base[t];
return ret;
}
int main(){
num[1]=1;
for(register int t=2;t<=63;++t) num[t]=num[t-1]<<1;
n=qr();
for(register int t=1;t<=n;++t) data[t]=qr(),S^=data[t];
for(register int t=1;t<=n;++t) insert(data[t]);
cout<<(top()^S)<<endl;
return 0;
}
最新文章
- Thinkphp 3.2中字符串截取
- Fragment的onResume
- Unity3D 第一人称控制器 C#脚本
- Beego源码分析(转)
- MSSQL 2005数据库可疑状态
- 针对AJAX与JSONP的异同
- vs2010中socket链接错误LINK2019
- pydev去掉右边的预览栏minimap
- MySQL系列(三)---索引
- python实战===使用随机的163账号发送邮件
- 8Manage:数据安全,企业新时代的护航利器
- python kafka权限校验client.id
- 通过IDEA搭建scala开发环境开发spark应用程序
- 多选穿梭框总结 (vue + element)
- RocketMQ集群部署记录
- Linux内核分析——进程的切换和系统的一般执行过程
- [Module] 06 - DataBinding and MVVM
- tyvj1659中中救援队
- Jython的应用
- git乌龟http/https以及ssh clone的秘钥配置永久免密码登录设置
热门文章
- qt 在ui界面添加控件后在cpp文件中无法调用?
- python 检测文件夹的数据变动
- shell 解析json
- SprinfJdbcTemplate+SpringMVC 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)
- 在 windows 安装 Jekyll
- PyODPS DataFrame 的代码在哪里跑
- JIRA管理员、用户密码重置
- 『PyTorch』第十一弹_torch.optim优化器 每层定制参数
- C# TransactionScope 事务类
- zoj 3652 Maze