Submission #1086414

#TimeUsernameProblemLanguageResultExecution timeMemory
1086414shikgom2씽크스몰 (kriii3_TT)Pypy 3
20 / 30
1139 ms164296 KiB
import sys
input = sys.stdin.readline
import cmath
import math

def fft(a, inv):
    n = len(a)
    j = 0
    for i in range(1, n):
        bit = n >> 1
        while j >= bit:
            j -= bit
            bit >>= 1
        j += bit
        if i < j:
            a[i], a[j] = a[j], a[i]
    
    angle = -2 * math.pi if inv else 2 * math.pi
    length = 2
    while length <= n:
        w = [cmath.exp(angle / length * i * 1j) for i in range(length // 2)]
        for i in range(0, n, length):
            for j in range(length // 2):
                u = a[i + j]
                v = a[i + j + length // 2] * w[j]
                a[i + j] = u + v
                a[i + j + length // 2] = u - v
        length <<= 1

    if inv:
        for i in range(n):
            a[i] /= n

def multiply(a, b):
    fa = [complex(x) for x in a]
    fb = [complex(x) for x in b]
    n = 1
    while n < max(len(a), len(b)):
        n <<= 1
    fa += [0] * (n - len(fa))
    fb += [0] * (n - len(fb))

    fft(fa, False)
    fft(fb, False)
    fa = [x * y for x, y in zip(fa, fb)]
    fft(fa, True)
    return [int(x.real + (0.5 if x.real > 0 else -0.5)) for x in fa]

n,m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

n += 1
m += 1
k = 1
while k < 2 * max(n, m) - 1:
    k <<= 1
a += [0] * (k - len(a))
b += [0] * (k - len(b))

res = multiply(a, b)
ans = 0
for x in res[:n + m - 1]:
    ans ^= x
print(ans)
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...