蓝桥杯 第3217题 简单的异或难题 C++ Java Python

题目

思路和解题方法

计算给定数组中子数组异或和的问题。它采用了前缀异或的方法来预处理数组,然后对于每个查询,通过异或操作计算子数组的异或和。

  1. 读取输入的数组,并计算每个位置的前缀异或和。
  2. 对于每个查询,读取查询的左右边界,计算对应子数组的异或和并输出。

复杂度

时间复杂度:O(n+m)

预处理数组的时间复杂度为 O(n),每个查询的时间复杂度为 O(1),因此总体时间复杂度为 O(n + m),其中 n 是数组长度,m 是查询次数。

空间复杂度:O(n)

程序的空间复杂度取决于数组大小和其他常量,因此为 O(n)。

c++ 代码

cpp 复制代码
#include <iostream>
using namespace std;

const int N = 1e5+10;

int main() {
    // 关闭输入输出流的同步,提高速度
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, m;
    cin >> n >> m;
    int a[N], prefix[N];

    // 读取数组并计算前缀异或和
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        prefix[i] = prefix[i - 1] ^ a[i];
    }

    while (m--) {
        int l, r;
        cin >> l >> r;
        // 计算子数组的异或和
        int ans = prefix[r] ^ prefix[l - 1];
        cout << ans << '\n';
    }
    return 0;
}

Java 版本(仅供参考)

java 复制代码
import java.util.*;

public class Main {
    static final int N = 100009;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] a = new int[N];
        int[] prefix = new int[N];

        for (int i = 1; i <= n; i++) {
            a[i] = scanner.nextInt();
            prefix[i] = prefix[i - 1] ^ a[i];
        }

        while (m-- > 0) {
            int l = scanner.nextInt();
            int r = scanner.nextInt();
            int ans = prefix[r] ^ prefix[l - 1];
            System.out.println(ans);
        }
    }
}

Python 版本(仅供参考)

python 复制代码
n, m = map(int, input().split())
a = list(map(int, input().split()))
prefix = [0] * (n + 1)

for i in range(1, n + 1):
    prefix[i] = prefix[i - 1] ^ a[i - 1]

for _ in range(m):
    l, r = map(int, input().split())
    ans = prefix[r] ^ prefix[l - 1]
    print(ans)

代码细节:

同异或==0 所以不用管奇数还是偶数

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦 >人< 。

相关推荐
曲幽30 分钟前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
python·sql·postgresql·fastapi·web·postgres·db·asyncpg
颜酱1 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
用户8356290780515 小时前
使用 C# 在 Excel 中创建数据透视表
后端·python
架构师沉默6 小时前
别又牛逼了!AI 写 Java 代码真的行吗?
java·后端·架构
saltymilk6 小时前
使用 C++ 模拟 ShaderLanguage 的 swizzle
c++·模板元编程
zone77396 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
码路飞8 小时前
FastMCP 实战:一个 .py 文件,给 Claude Code 装上 3 个超实用工具
python·ai编程·mcp
CoovallyAIHub9 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉