Skip to content

20626: 对子数列做XOR运算

http://cs101.openjudge.cn/practice/20626/

给定一个正整数数列V,V的下标从零开始。

对V的子数列W进行XOR查询,输入的查询指令有2个数L,R,L<=R,分别为W中第一个和最后一个元素在V中的下标。计算W中所有元素的XOR值,即:V[L] xor V[L+1] xor ... xor V[R]

输入不同的L, R,对V进行10000次查询。

输入

第一行是一个空格分开的正整数数列V 第2-10001行每行有2个数L, R,中间用空格分开

输出

10000行整数

样例输入

1 3 4 8
0 1
1 2
0 3
3 3

样例输出

2
7
14
8

提示

对照样例输入:数列为1,3,4,8。它们用二进制表示:1 = 0001,3 = 0011, 4 = 0100 ,8 = 1000;当L, R的值依次为 0,1时,求得 1 xor 3 = 2 1,2时,求得 3 xor 4 = 7 0,3时,求得 1 xor 3 xor 4 xor 8 = 14 3,3时,求得 8 顾输出 2 7 14 8。 实际上会有10000行查询指令,请按照样例格式按行输出查询结果。

python
def precompute_xor_prefixes(values):
    xor_prefixes = [0] * (len(values) + 1)
    for i in range(len(values)):
        xor_prefixes[i+1] = xor_prefixes[i] ^ values[i]
    return xor_prefixes

# 读取输入并处理
values = list(map(int, input().split()))
xor_prefixes = precompute_xor_prefixes(values)

# 读取查询并处理
for _ in range(10000):
    L, R = map(int, input().split())
    result = xor_prefixes[R+1] ^ xor_prefixes[L]
    print(result)

i/o优化啊,1w输入输出

python
# 23n2300017735(夏天明BrightSummer)
import sys
input = sys.stdin.readline

V = [int(i) for i in input().split()]
preV = [0]*(len(V)+1)
for i in range(len(V)):
    preV[i+1] = preV[i] ^ V[i]

results = []
for i in range(10000):
    L, R = map(int, input().split())
    results.append(str(preV[R+1] ^ preV[L]))

sys.stdout.write('\n'.join(results) + '\n')