【题解】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;
}

【题解】LOJ6060 Set(线性基)的更多相关文章

  1. BZOJ 4671 异或图 | 线性基 容斥 DFS

    题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中 ...

  2. 【BZOJ4184】shallot 线段树+vector+线性基

    [BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...

  3. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  4. 【LOJ6060】【2017 山东一轮集训 Day1 / SDWC2018 Day1】Set 线性基

    题目大意 给出 \(n\) 个非负整数,将数划分成两个集合,记为一号集合和二号集合.\(x_1\) 为一号集合中所有数的异或和,\(x_2\) 为二号集合中所有数的异或和.在最大化 \(x_1 + x ...

  5. 【题解】 Codeforces 662A Gambling Nim (线性基)

    662A,戳我戳我 Solution: 我们先取\(ans=a[1] \bigoplus a[2] \bigoplus ... \bigoplus a[n]\),然后我们定义\(c[i]=a[i] \ ...

  6. 【题解】kth异或和/魔改版线性基

    [题解]魔改版线性基 魔改版线性基解决此类问题. 联系线性空间的性质,我们直接可以构造出这样的基: \[ 100000 \\ 010000 \\ 000010 \\ 000001 \] 使得每个基的最 ...

  7. 【题解】P4570 [BJWC2011]元素 - 线性基 - 贪心

    P4570 [BJWC2011]元素 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 给你 \(n\) 个二元组 \( ...

  8. Codeforces 959F Mahmoud and Ehab and yet another xor task 线性基 (看题解)

    Mahmoud and Ehab and yet another xor task 存在的元素的方案数都是一样的, 啊, 我好菜啊. 离线之后用线性基取check存不存在,然后计算答案. #inclu ...

  9. 题解——洛谷P3812【模板】线性基

    学了下线性基 使用好像并不复杂 打了板子 但是要注意位运算优先级 #include <cstdio> #include <algorithm> #include <cst ...

随机推荐

  1. iptables 操作规则

    iptables -nL查看本机关于iptables的设置情况,默认查看的是-t filter,可以指定-t nat iptables-save > iptables.rule会保存当前的防火墙 ...

  2. phpstorm 左边的文件列表没用了 怎么弄出来

      ALT+1ALT+数字键,是各种工具栏的显示与隐藏快捷键,你可以挨个试一下.

  3. CSS检测窗口大小显示和隐藏内容

    代码不多 用css写的话简单一点 @media (max-width: 1024px) { #hidden { display: none; } } max-width 是要检测的宽度

  4. hdu 1595 find the longest of the shortest(迪杰斯特拉,减去一条边,求最大最短路)

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  5. H3C 网络层

  6. 2018-8-10-win10-uwp-后台获取资源

    title author date CreateTime categories win10 uwp 后台获取资源 lindexi 2018-08-10 19:17:19 +0800 2018-2-13 ...

  7. Python 科学计算库numpy

    Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数 # 多维数组ndarray import numpy as np ar ...

  8. [转]ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  9. 1625 - Color Length——[动态规划]

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  10. H3C 递归查询