NC14247 Xorto
NC14247 Xorto
题目
题目描述
给定一个长度为 \(n\) 的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为 \(0\) 。
输入描述
第一行一个数 \(n\) 表示数组长度;
第二行 \(n\) 个整数表示数组;
\(1 \leq n \leq 1000\), \(0\leq 数组元素 < 100000\) 。
输出描述
一行一个整数表示答案。
示例1
输入
3
0 0 0
输出
5
说明
([1,1],[2,2]),([1,1],[3,3]),([1,1],[2,3]),([1,2],[3,3]),([2,2],[3,3])
题解
思路
知识点:前缀异或和+枚举。
注意到区间是不重合但长度不定,考虑枚举左区间的右端点 \(i\) 。对于某个左区间右端点 \(i\) ,枚举左区间左端点 \(j\) ,左区间可能被右区间重复匹配,考虑利用数组 \(cnt\) 记录某个异或值的左区间个数;对于某个左区间右端点 \(i\) ,固定右区间左端点为 \(i+1\), 枚举右区间的右端点 \(j\) ,与之前记录的 \(cnt\) 进行匹配。
时间复杂度 \(O(n^2)\)
空间复杂度 \(O(1)\)
代码
#include <bits/stdc++.h>
using namespace std;
int a[1007],cnt[2*100000+7];
int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i = 1;i<=n;i++){
cin>>a[i];
a[i] ^= a[i-1];
}
long long ans = 0;///O(n^4)空间 大概1x10^12>2*10^9
for(int i = 1;i<=n;i++){///向左遍历左区间的右端点i。对于一组相同端点的左区间,一定会被其右端点往后的点作为左端点的右区间遍历匹配,因此每次处理都保留
for(int j = 1;j<=i;j++){///遍历以i为右端点的左区间的左端点
cnt[a[i]^a[j-1]]++;
}
for(int j = i+1;j<=n;j++){///遍历以i+1为左端点的右区间的右端点
ans+=cnt[a[j]^a[i]];
}
}
cout<<ans<<'\n';
return 0;
}
NC14247 Xorto的更多相关文章
- Wannafly挑战赛1,2
做了好久了,今天大佬讲题,好厉害,弱鸡只会几道水题. Treepath 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x到y与y到x被视为同一条路径.路径的起点与终点 ...
随机推荐
- 论文阅读 DynGEM: Deep Embedding Method for Dynamic Graphs
2 DynGEM: Deep Embedding Method for Dynamic Graphs link:https://arxiv.org/abs/1805.11273v1 Abstract ...
- 分布式任务调度平台XXL-JOB安装及使用
一.为什么需要任务调度平台 在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群.不支持统计.没有管理平台.没有失败报警.没有监控等等而且在现在分布 ...
- python学习-Day16
目录 今日内容详细 内置函数补充 常见内置函数 help() id() int() isinstance() pow() round() sum() 求和 迭代器 可迭代对象 什么是可迭代对象? 哪些 ...
- 1.16 Linux该如何学习(新手入门必看)
本节旨在介绍对于初学者如何学习 Linux 的建议.如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法. 如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由 ...
- Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql
0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...
- Glide源码解析二---into方法
转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12543154.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白 ...
- 并发编程系列之Lock锁可重入性与公平性
一.相似之处:Lock锁 vs Synchronized 代码块 Lock锁是一种类似于synchronized 同步代码块的线程同步机制.从Java 5开始java.util.concurrent. ...
- linux篇-CentOS7搭建NTP服务器
1查看服务器.客户端操作系统版本 2查看服务器是否安装ntp 3如果没有安装 4安装完成后重新查看服务器是否安装ntp 5查看ntp服务器状态 6修改配置文件 注释 #server 0.centos. ...
- C#中的枚举器
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月28日. 一.先从可枚举类型讲起 1.1 什么是可枚举类型? 可枚举类型,可以简单的理解为: 有一个类,类中有挺多的数据,用一种统 ...
- VMware Workstation 虚拟机详细安装教程
一.介绍篇 VMware Workstation 16 Pro是VMware(威睿公司)于2021年最新发布的一代虚拟机软件,软件的中文名是"VMware 工作站 16 专业版". ...