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 但它显示大型测试用例超出了时间限制 希望为上述内容提供有效的实施

我得到了以下信息:

  • 其中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
    
    但它显示大型测试用例超出了时间限制

    希望为上述内容提供有效的实施建议

    **

    回复:问题的最新实施方法

    **

    合并后的算法提出了我的建议

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