蓝桥杯——神奇的数组

题目描述

欢迎来到异或王国,这是一个特殊的王国,对于一个数组它的价值并非所有数相加,而是所有数异或得到的值。

当然对于某些神奇的数组来说值可能是一样的,给定一个长度为 n 的数组 a ,请问有多少个子数组是神奇数组。

换句话说,在数组 a 中存在多少对下标 l 和 r(1≤l≤r≤n) 满足:al⊕al+1⊕...⊕ar=al+al+1+...+ar

输入格式

第一行输入一个整数 n ,表示数组 a 的长度。

第二行输入 n 个整数,表示数组 a 的值。

数据保证 1≤n≤2×105​​,0≤ai<220​​。

输出格式

输出一个整数表示答案。

样例输入

复制代码
5
1 2 3 4 5

样例输出

复制代码
7

说明

对于样例,满足条件的下标有 (1,1),(1,2),(2,2),(3,3),(3,4),(4,4),(5,5),总共 7 对。

代码如下:

复制代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 2e5 + 9;
ll a[maxn];

int main()
{
    int n; cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    int l = 1, r = 1, res = 0;
    ll ans = 0;
    while (l <= n) {
        while (r <= n && ((res ^ a[r]) == (res + a[r]))) res ^= a[r], r++;
        ans += r - l;
        res ^= a[l];
        l++;
    }
    cout << ans << '\n';

    return 0;
}
相关推荐
一轮弯弯的明月14 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
liu****15 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
hnjzsyjyj19 小时前
洛谷 P8749:[蓝桥杯 2021 省 B] 杨辉三角形 ← 组合数 + 二分
蓝桥杯·二分·杨辉三角·组合数
Lauren_Blueblue21 小时前
第十六届蓝桥杯省赛Python研究生组-F串
python·算法·蓝桥杯·算法基础
仟濹21 小时前
【算法打卡day39(2026-04-06~08 周一~周三)】(10道蓝桥杯真题)今日练习:蓝桥杯第13届省赛B组Cpp组
算法·职场和发展·蓝桥杯
小年糕是糕手21 小时前
【35天从0开始备战蓝桥杯 -- Day9】
数据结构·数据库·c++·算法·蓝桥杯
List<String> error_P2 天前
蓝桥杯最后几天冲刺
蓝桥杯
Tanecious.2 天前
蓝桥杯备赛:Day8-小苯的异或和
c++·蓝桥杯
Lauren_Blueblue2 天前
第十六届蓝桥杯省赛Python研究生组-C变换数组
python·算法·蓝桥杯·编程基础
Tanecious.2 天前
蓝桥杯备赛:Day8-小红杀怪
c++·蓝桥杯