結果
| 問題 |
No.1142 XOR と XOR
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-11 10:24:39 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,267 bytes |
| コンパイル時間 | 240 ms |
| コンパイル使用メモリ | 82,256 KB |
| 実行使用メモリ | 137,220 KB |
| 最終ジャッジ日時 | 2024-09-18 06:15:11 |
| 合計ジャッジ時間 | 5,088 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 WA * 18 |
ソースコード
from typing import List
MOD = int(1e9) + 7
INV = pow(2, MOD - 2, MOD)
def xorConvolution(a: List[int], b: List[int]) -> List[int]:
a, b = a[:], b[:]
a = _walshHadamardTransform(a, 1)
b = _walshHadamardTransform(b, 1)
for i in range(len(a)):
a[i] = a[i] * b[i] % MOD
res = _walshHadamardTransform(a, INV)
return res
def _walshHadamardTransform(f, op):
n = len(f)
l_, k = 2, 1
while l_ <= n:
for i in range(0, n, l_):
for j in range(k):
f[i + j], f[i + j + k] = (f[i + j] + f[i + j + k]) * op % MOD, (
f[i + j] + MOD - f[i + j + k]
) * op % MOD
l_, k = l_ << 1, k << 1
return f
if __name__ == "__main__":
n, m, k = map(int, input().split())
nums1 = list(map(int, input().split()))
nums2 = list(map(int, input().split()))
MAX = 1024
f, g = [0] * MAX, [0] * MAX
f[0], g[0] = 1, 1
xor_ = 0
for num in nums1:
xor_ ^= num
f[xor_] += 1
xor_ = 0
for num in nums2:
xor_ ^= num
g[xor_] += 1
f, g = xorConvolution(f, f), xorConvolution(g, g)
f[0], g[0] = (f[0] - n - 1) % MOD, (g[0] - m - 1) % MOD
res = xorConvolution(f, g)
print((res[k] // 4) % MOD)