49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
|
# -*- coding:utf-8 -*-
|
|||
|
# @Author len
|
|||
|
# @Create 2023/12/27 12:14
|
|||
|
|
|||
|
# 6.异或和之差
|
|||
|
# 问题描述
|
|||
|
# 给定一个含有n个元素的数组A,你可以选择两个不相交的子段。求出这两个子段内的数的异或和的差值的最大值。
|
|||
|
# 输入格式
|
|||
|
# 输入的第一行包含一个整数n。
|
|||
|
# 第二行包含n个整数A,相邻整数之间使用一个空格分隔
|
|||
|
# 输出格式
|
|||
|
# 输出一行包含一个整数表示答案。
|
|||
|
# 样例输入
|
|||
|
# 6
|
|||
|
# 1 2 4 9 2 7
|
|||
|
# 样例输出
|
|||
|
# 14
|
|||
|
# 样例说明
|
|||
|
# 两个子段可以分别选1和4,9,2,差值为 15-114
|
|||
|
|
|||
|
def max_xor_sum_difference(arr):
|
|||
|
# 预计算异或前缀数组。
|
|||
|
n = len(arr)
|
|||
|
xor_arr = [0] * (n+1)
|
|||
|
for i in range(1, n+1):
|
|||
|
xor_arr[i] = xor_arr[i-1] ^ arr[i-1]
|
|||
|
|
|||
|
# 初始化答案。
|
|||
|
max_difference = 0
|
|||
|
|
|||
|
# 遍历所有非重叠子段对。
|
|||
|
for i in range(1, n+1):
|
|||
|
for j in range(i, n+1):
|
|||
|
for k in range(j+1, n+1):
|
|||
|
for l in range(k, n+1):
|
|||
|
# 计算两个子段的异或和。
|
|||
|
xor1 = xor_arr[j] ^ xor_arr[i-1]
|
|||
|
xor2 = xor_arr[l] ^ xor_arr[k-1]
|
|||
|
# 更新最大差值。
|
|||
|
max_difference = max(max_difference, abs(xor1 - xor2))
|
|||
|
|
|||
|
return max_difference
|
|||
|
|
|||
|
# 样例输入
|
|||
|
array_length = int(input())
|
|||
|
arr = list(map(int, input().split(" ")))
|
|||
|
# 输出结果
|
|||
|
print(max_xor_sum_difference(arr))
|