2020牛客寒假算法基础集训营4 D:子段异或
D : 子段异或

考察点 : 位运算,前缀和,异或的性质和应用
坑点 : 0 - L 的异或值是 0 的话也是一个区间
相同的值可能有多个,那么这时候区间就会有多个(x * (x + 1) / 2)
关于异或的性质和应用:https://www.cnblogs.com/prjruckyone/p/12302732.html
侃侃 :
怎么求区间异或值为 0 的区间呢 ?
在求这个之前,可以想一下怎么求区间 和 为 0 的区间呢?
我们知道一个区间和或者区间异或 [L,R] 都可以表示为 sum[R] - sum[L - 1];
(具体可参考上面那篇博客 : [关于异或的性质和应用](https://www.cnblogs.com/prjruckyone/p/12302732.html))
那么区间 和 怎么才会是 0 呢?是不是只有 相同的两个数相减才会 = 0,
同样的,我们知道 相同的两个值 异或 = 0;
那么我们只需要先求出所有的异或前缀和,然后看有多少值是相等的,然后根据相等的个数来计算区间即可。
Code:
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn = 2e5 + 10;
int sum[maxn],a[maxn];
int n;
LL cnt = 0;
int main(void) {
scanf("%d",&n);
for(int i = 1; i <= n; i ++) {
scanf("%d",&a[i]);
if(i == 1) sum[i] = a[i];
else {
sum[i] = sum[i - 1] ^ a[i];
}
if(sum[i] == 0) cnt ++;
}
sort(sum + 1,sum + 1 + n);
LL ans = 0;
sum[n + 1] = -1;
for(int i = 1; i <= n; i ++) {
// if(sum[i] == 0) continue; // 0 相等的区间也要算上
if(sum[i] == sum[i + 1]) {
ans ++;
} else {
// if(ans != 1)
cnt += (ans * (ans + 1) / 2) ; // ans 至少是 1 对,
ans = 0;
}
}
cout << cnt << endl;
return 0;
}
2020牛客寒假算法基础集训营4 D:子段异或的更多相关文章
- 2020牛客寒假算法基础集训营4 C : 子段乘积
C:子段乘积 考察点 : 线段树,尺取,乘法逆元 坑点 : 区间要做到不重不漏, long long 侃侃 : 这道题在比赛是写的尺取,但是写了半天发现不好处理除 0 问题(浮点错误),需要用到乘法逆 ...
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- 2020牛客寒假算法基础集训营4-F树上博弈
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...
- 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...
- 2020牛客寒假算法基础集训营1 F-maki和tree
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 2020牛客寒假算法基础集训营5 G街机争霸
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...
- 2020牛客寒假算法基础集训营6 I.导航系统 (最小生成树)
https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法, ...
- 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...
随机推荐
- P2722 总分 Score Inflation (完全背包模板)
题目传送门:P2722 总分 Score Inflation 题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时 ...
- Web及网络基础学习(一)
---恢复内容开始--- 2019.10.16 1.TCP.IP分层 应用层.网络层.传输层.数据链路层 2.各层讲解 应用层 决定了向用户提供应用服务时通信的活动.例如FTP(File Trans ...
- BFT-SMaRt:用Java做节点间的可靠信道
目录 一.引子 二.名词统一 1. 节点id 2. 节点 3. 本地节点 4. 配置域 5. TTP 6. 陌生域 三.节点服务类 四.节点通信系统概览 五.节点通信层准备 1. 创建socket服务 ...
- 各种小的 dp (精)
Q~ 抛一枚硬币 n 次,每次可能是正面或者反面向上,求没有连续超过 k 次硬币向上的方案数 A : dp[ i ] 表示到 i 位置的方案数, 1 . 当 i < k 时, dp[i] = d ...
- DateTime.Now
// 2008年4月24日 System.DateTime.Now.ToString( " D " );// 2008-4-24 System.DateTime.Now.ToStr ...
- idea 忽略不需要提交的文件
1.打开git bash界面,进入到某个项目的根目录,执行下面命令 touch .gitignore 此时,再该项目的根目录里,会创建.gitignore文本,打开该文本,编辑需要忽略的文件(编辑规则 ...
- 小白学Java:奇怪的RandomAccess
目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAc ...
- session跨域丢失问题
配置一个 filter package com.psm.filter; import javax.servlet.*; import javax.servlet.http.HttpServletReq ...
- Codeforces Choosing Laptop 题解
这题实在是太水了,具体看注释 蒟蒻的方法是一边找过时的电脑一边比大小 蒟蒻不才,只会C++ 其实还会free basic,但它已经过时了 附: 本题洛谷网址 Codeforces网址 希望蒟蒻的题解能 ...
- [洛谷P4585] [FJOI2015] 火星商店问题
Description 火星上的一条商业街里按照商店的编号 \(1\),\(2\) ,-,\(n\) ,依次排列着 \(n\) 个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数 \(va ...