Submission #1008596

#TimeUsernameProblemLanguageResultExecution timeMemory
1008596shikgom2씽크스몰 (kriii3_TT)Pypy 3
10 / 30
7693 ms429076 KiB
import sys input = sys.stdin.readline from functools import reduce import operator MOD = 998244353 ROOT = 3 IROOT = pow(ROOT, MOD-2, MOD) def NTT(v, inv): S = len(v) j = 0 for i in range(1, S): bit = S // 2 while j >= bit: j -= bit bit //= 2 j += bit if i < j: v[i], v[j] = v[j], v[i] k = 1 while k < S: z = pow(ROOT if inv else IROOT, (MOD-1) // (2*k), MOD) i = 0 while i < S: w = 1 for j in range(k): even = v[i + j] odd = v[i + j + k] * w % MOD v[i + j] = (even + odd) % MOD v[i + j + k] = (even - odd + MOD) % MOD w = w * z % MOD i += k * 2 k *= 2 if inv: invS = pow(S, MOD-2, MOD) for i in range(S): v[i] = v[i] * invS % MOD def mul(v, u): S = 2 while S < len(v) + len(u): S *= 2 vc = v + [0] * (S - len(v)) uc = u + [0] * (S - len(u)) NTT(vc, False) NTT(uc, False) for i in range(S): vc[i] = vc[i] * uc[i] % MOD NTT(vc, True) return vc n, m = map(int, input().split()) a = [0] * 2000010 b = [0] * 2000010 a_input = list(map(int, input().split())) b_input = list(map(int, input().split())) a[:n+1] = a_input b[:m+1] = b_input aa = [x & ((1 << 10) - 1) for x in a] bb = [x & ((1 << 10) - 1) for x in b] ret22 = mul(aa, bb) aa = [x >> 10 for x in a] bb = [x & ((1 << 10) - 1) for x in b] ret12 = mul(aa, bb) aa = [x & ((1 << 10) - 1) for x in a] bb = [x >> 10 for x in b] ret21 = mul(aa, bb) aa = [x >> 10 for x in a] bb = [x >> 10 for x in b] ret11 = mul(aa, bb) ans = 0 max_len = min(len(ret11), len(ret21), len(ret12), len(ret22)) for i in range(max_len): ans ^= (ret11[i] << 20) + ((ret21[i] + ret12[i]) << 10) + ret22[i] print(ans)
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...