题目分析:

考虑到这是一个区间的异或问题,不妨求出前缀和,令$sum[i] = Xor_{j=1}^{i}a[j]$。

对于区间$[l,r]$的异或结果,等于$sum[r] \oplus sum[l-1]$。那么原问题等价于选尽量多的点$p_x$,使得这些点构成的$sum[p_x] \oplus sum[p_{x-1}]$的子集的异或非$0$。我们不断往前异或,可以把问题转化为选尽量多的$p_x$,使得$sum[p_x]$的子集的异或非$0$。这是因为这两者的线性基等价。

这样子这题就变成BZOJ2460的弱化版了。关于BZOJ2460的证明,我还没想到。但是这道题是它的弱化版,也就是$magic=1$的情况,我可以试着给出一个证明。

使用反证法,假设以不同的顺序插入线性基得到的答案是不同的,那么存在一种插入方式使得答案线性基为${a_i}$,另一种插入方式线性基为${b_i}$,$|{a_i}| > |{b_i}|$。现在只需说明$|{a_i}| = |{b_i}|$即可。

实际上这里有一个想法,就是任意一种插入方式构成的线性基能表示出的数是相同的,就能说明$|{a_i}| = |{b_i}|$。为什么?

想象一个二维空间和一个三维空间,坐标$(1,2,3)$不能在一个二维空间被表示不是吗?同理两个表示域相同的线性基的维度肯定相同,否则其中维度多的那个线性基的某一维肯定可以被其它维表示,这不符合线性基的定义。

假设现在存在一个数$x$,$a$线性基可以表示,$b$线性基表示不了。如果这个数属于原序列,那么它一定早就被插入了$b$线性基中,而不会被忽视。否则它一定能被原序列中的几个数所表示出来。但我们又发现$b$线性基可以表示出原序列中的任何数,那么利用这些表示方法同样可以表示出$x$,所以这样的数不存在。所以$|{a_i}| = |{b_i}|$。

代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn = ; int n,a[maxn]; int p[]; void read(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),a[i] ^= a[i-];
} void work(){
if(a[n] == ){puts("-1");return;}
for(int i=;i>=;i--)if(a[n] & (<<i)) {p[i] = a[n];break;}
int ans = ;
for(int i=;i<n;i++){
for(int j=;j>=;j--){
if(a[i] & (<<j)){
if(p[j]) a[i] ^= p[j];
else{p[j] = a[i];ans++;break;}
}
}
}
printf("%d\n",ans);
} int main(){
read();
work();
return ;
}

Codeforces1101G (Zero XOR Subset)-less 【线性基】【贪心】的更多相关文章

  1. CodeForces - 1101G :(Zero XOR Subset)-less(线性基)

    You are given an array a1,a2,…,an of integer numbers. Your task is to divide the array into the maxi ...

  2. CF1101G (Zero XOR Subset)-less 线性基

    传送门 既然每一次选择出来的都是一个子段,不难想到前缀和计算(然而我没有想到--) 设异或前缀和为\(x_i\),假设我们选出来的子段为\([1,i_1],(i_1,i_2],...,(i_{k-1} ...

  3. BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)

    题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...

  4. bzoj 2115 Xor - 线性基 - 贪心

    题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...

  5. BZOJ 4269: 再见Xor 线性基+贪心

    Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整数N. 接下来一行N个非负整数. ...

  6. 【BZOJ-2460&3105】元素&新Nim游戏 动态维护线性基 + 贪心

    3105: [cqoi2013]新Nim游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 839  Solved: 490[Submit][Stat ...

  7. (Zero XOR Subset)-less-线性基

    (Zero XOR Subset)-less 题意 :把n个数分成多个集合,要求 不能有集合为空,最终不能有非空子集合异或值为0,尽可能划分的多一些. 思路 :非法情况就只有 n个数异或 为0,其他的 ...

  8. BZOJ.2460.[BeiJing2011]元素(线性基 贪心)

    题目链接 线性基:https://blog.csdn.net/qq_36056315/article/details/79819714. \(Description\) 求一组矿石,满足其下标异或和不 ...

  9. Codeforces 1100F(线性基+贪心)

    题目链接 题意 给定序列,$q(1\leq q \leq 100000) $次询问,每次查询给定区间内的最大异或子集. 思路 涉及到最大异或子集肯定从线性基角度入手.将询问按右端点排序后离线处理询问, ...

随机推荐

  1. 05 Docker集群/基础设施 - DevOps之路

    05 Docker集群/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker的集群目前主流的 ...

  2. LNK2022: 元数据操作失败(8013118D): 重复类型(FactoryContext)中的布局信息不一致: (0x02000230)

    1. c++项目 A 编译成A.lib文件 2. c++项目B引用这个A.lib文件 3. A项目存在一个类跟B项目一样,但是A项目其他文件需要这个类里面的某些东西,我将不需要的全部注释掉,然后编译A ...

  3. ubuntu中更改apache默认目录的方法

    如上,在这两个文件中,我都改为/home/www 及/home/www/html

  4. oc之证书

    https://www.cnblogs.com/MrJalen/p/6813309.html iOS推送证书生成pem文件(详细步骤)   1.pem文件概述 pem文件是服务器向苹果服务器做推送时候 ...

  5. Python之字符串格式化

    1)     占位符%s: %s是通用的占位符,所有类型不管是string还是int还是float全都代表. 如果使用%d,则只能代表整数:如果是%f,则只能代表小数: 2)     直接用加号+连接 ...

  6. jvisualvm中VisualGC插件提示:不受此JVM支持

    Visual GC插件「不受此JVM支持」问题 - djp567的博客 - CSDN博客https://blog.csdn.net/djp567/article/details/78662047 jv ...

  7. MySQL 查询语句中自己定义的中文内容在Java Web 中显示为问号

    Java Web 端做查询时,性别字段存的是数字,1代表男,2代表女,取数据时将性别转为汉字显示在页面,sql语句如下,结果发生了问题  select a.emp_id,a.emp_name ,cas ...

  8. mybatis源码分析(四)---------------代理对象的生成

    在mybatis两种开发方式这边文章中,我们提到了Mapper动态代理开发这种方式,现在抛出一个问题:通过sqlSession.getMapper(XXXMapper.class)来获取代理对象的过程 ...

  9. vue的地图插件amap

    https://www.jianshu.com/p/0011996b81e2(amap) npm install vue-amap --save

  10. HTML5经典实例——1基础语法和语义

    1指定DOCTYPE 在页面的最开始处指定HTML5 DOCTYPE DOCTYPE是不区分大小写的.可以任意的使用大小写. <!DOCTYPE html> <html lang=& ...