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的更多相关文章

  1. Wannafly挑战赛1,2

    做了好久了,今天大佬讲题,好厉害,弱鸡只会几道水题. Treepath 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x到y与y到x被视为同一条路径.路径的起点与终点 ...

随机推荐

  1. 小程序开发之获取客户来源 scene 场景值 手机设备信息

    为什么要获取客户来源 用作数据分析,根据客户来源,做精准转化! 判断客户来源入口方式 1.通过官方的scene场景值 常见场景值 场景值ID 说明 1001 发现栏小程序主入口,「最近使用」列表 10 ...

  2. C++ 类成员指针

    C++的类成员指针是一种奇葩的指针. 假设现在我们要表示一个三维的点,现在有两种定义方式: struct point1{ int x, y, z; }; struct point2{ int c[3] ...

  3. 算法篇(1) KMP JS实现最优查找子串

    var strStr = function (haystack, needle) { let i=0, j = 0; let length = haystack.length; let next = ...

  4. stm32F103RCT6的DMA使用经历

    ​ DMA可以直接传输数据,减少了CPU的负担,是个很好的功能,但是用的时候难免会一头雾水.这次做个小小的串口收发程序就碰到了许多问题. 之前没有注意,选择了DMA的circular模式,然后奇怪的事 ...

  5. Flatbuffers学习

    flatbuffers简介 FlatBuffers 是一个(二进制 buffer)序列化开源库,由 Google 开源现在它支持C++, C#, C, Go, Java, Kotlin, JavaSc ...

  6. 浅尝Spring注解开发_AOP原理及完整过程分析(源码)

    浅尝Spring注解开发_AOP原理及完整过程分析(源码) 浅尝Spring注解开发,基于Spring 4.3.12 分析AOP执行过程及源码,包含AOP注解使用.AOP原理.分析Annotation ...

  7. 『现学现忘』Git基础 — 20、Git中忽略文件补充

    目录 1.忽略文件常遇到的问题 2.忽略文件配置优先级 3.忽略已跟踪文件的改动(本机使用) 4.autocrlf和safecrlf参数说明 (1)提出问题 (2)autocrlf说明 (3)safe ...

  8. 操作系统实现-printk

    博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来实现最基础,也是最常见的函数print,大家都知道这个是可变参数函数,那具体怎 ...

  9. 如何使用Python实现图像融合及加法运算?

    摘要:本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括三部分知识:图像融合.图像加法运算.图像类型转换. 本文分享自华为云社区<[Python图像处理] 五.图像融合.加 ...

  10. 什么!Sentinel流控规则可以这样玩?

    项目源码地址:公众号回复 sentinel,即可免费获取源码 前言 上一篇文章中,我们讲解了关于sentinel基本介绍以及流控规则中直接和快速失败的效果,有兴趣的可以去看上一篇文章,今天,我们给大家 ...