Python 基于大序列和异或运算实现问题的最有效方法
我得到了以下信息:Python 基于大序列和异或运算实现问题的最有效方法,python,xor,Python,Xor,我得到了以下信息: 其中n是序列的大小 k是一个整数 a序列a[0]a[1]a[2]……a[n-1] 我需要执行从0到(k-1)的每个I(含) find a,b where a=A[i%n] and b=A[n-(i%n)-1] then set A[i%n]=a XOR b 并输出最终分离的序列空间 订单如下: n<=10^4 k<=10^12 Ai<=10^7 for each i 但它显示大型测试用例超出了时间限制 希望为上述内容提供有效的实施
find a,b
where a=A[i%n] and b=A[n-(i%n)-1]
then set A[i%n]=a XOR b
并输出最终分离的序列空间
订单如下:
n<=10^4
k<=10^12
Ai<=10^7 for each i
但它显示大型测试用例超出了时间限制
希望为上述内容提供有效的实施建议**
回复:问题的最新实施方法
**
合并后的算法提出了我的建议
@AJNeufeld和@vujazzman
如果循环运行到(N*3)
因此,我们可以为k的所有值节省运行开销
而是找到与K最近的倍数(n*3),然后运行循环以获得从找到的倍数到K的剩余值
注:-奇数n
案例由设置A[n//2]=0事先单独处理
因此,我提出了以下实施方案:
for _ in range(int(input())):
n,k=map(int,input().split())
arr=list(map(int,input().split()))
if n % 2 and k > n//2 : #odd n case
arr[ n//2 ] = 0
rem= k % ( 3*n )
closest_multiple_3n = ( k-rem )
for i in range( closest_multiple_3n,k ):
t=i % n
arr[t] ^= arr[-1-t]
print(*arr)
我创建了一些自制的测试用例,如:-
t=1
n=11 k=9999999998
A[] = 20 7 27 36 49 50 67 72 81 92 99
output:- 20 7 27 36 49 0 67 72 81 92 119
note :- closest_multiple_3n = 9999999966
rem = 32
(20^92=119)
现在,它在不到1秒的时间内就可以完美地工作了我认为这个答案属于他们。他们拒绝建议新的实现,说现在是审查当前代码的地方
t=1
n=11 k=9999999998
A[] = 20 7 27 36 49 50 67 72 81 92 99
output:- 20 7 27 36 49 0 67 72 81 92 119
note :- closest_multiple_3n = 9999999966
rem = 32
(20^92=119)