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')