結果

問題 No.206 数の積集合を求めるクエリ
ユーザー neterukunneterukun
提出日時 2021-05-03 10:44:16
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 513 ms / 7,000 ms
コード長 1,531 bytes
コンパイル時間 337 ms
コンパイル使用メモリ 82,652 KB
実行使用メモリ 232,036 KB
最終ジャッジ日時 2024-07-21 23:29:33
合計ジャッジ時間 10,590 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 37 ms
53,456 KB
testcase_01 AC 38 ms
54,052 KB
testcase_02 AC 54 ms
65,844 KB
testcase_03 AC 38 ms
53,468 KB
testcase_04 AC 39 ms
54,056 KB
testcase_05 AC 45 ms
61,792 KB
testcase_06 AC 72 ms
77,484 KB
testcase_07 AC 72 ms
77,544 KB
testcase_08 AC 71 ms
77,568 KB
testcase_09 AC 70 ms
77,444 KB
testcase_10 AC 38 ms
54,392 KB
testcase_11 AC 53 ms
66,276 KB
testcase_12 AC 81 ms
77,932 KB
testcase_13 AC 78 ms
78,208 KB
testcase_14 AC 80 ms
78,292 KB
testcase_15 AC 79 ms
77,868 KB
testcase_16 AC 79 ms
77,892 KB
testcase_17 AC 496 ms
225,348 KB
testcase_18 AC 475 ms
225,244 KB
testcase_19 AC 490 ms
225,260 KB
testcase_20 AC 474 ms
223,232 KB
testcase_21 AC 473 ms
225,188 KB
testcase_22 AC 476 ms
225,564 KB
testcase_23 AC 485 ms
225,512 KB
testcase_24 AC 513 ms
231,764 KB
testcase_25 AC 511 ms
231,948 KB
testcase_26 AC 504 ms
231,828 KB
testcase_27 AC 496 ms
230,900 KB
testcase_28 AC 503 ms
232,036 KB
testcase_29 AC 492 ms
231,796 KB
testcase_30 AC 484 ms
231,292 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = sys.stdin.buffer.readline
from cmath import pi, exp


def _fft(a, h):
    roots = [exp(2.0j * pi / 2 ** i) for i in range(h + 1)]
    for i in range(h):
        m = 1 << (h - i - 1)
        for j in range(1 << i):
            w = 1
            j *= 2 * m
            for k in range(m):
                a[j + k], a[j + k + m] = \
                    a[j + k] + a[j + k + m], (a[j + k] - a[j + k + m]) * w
                w *= roots[h - i]


def _ifft(a, h):
    iroots = [exp(-2.0j * pi / 2 ** i) for i in range(h + 1)]
    for i in range(h):
        m = 1 << i
        for j in range(1 << (h - i - 1)):
            w = 1
            j *= 2 * m
            for k in range(m):
                a[j + k], a[j + k + m] = \
                    a[j + k] + a[j + k + m] * w, a[j + k] - a[j + k + m] * w
                w *= iroots[i + 1]
    n = 1 << h
    for i in range(n):
        a[i] /= n


def fft_convolve(a, b):
    n = 1 << (len(a) + len(b) - 1).bit_length()
    h = n.bit_length() - 1
    a = list(a) + [0] * (n - len(a))
    b = list(b) + [0] * (n - len(b))

    _fft(a, h), _fft(b, h)
    a = [va * vb for va, vb in zip(a, b)]
    _ifft(a, h)
    return [int(abs(val) + 0.5) for val in a]


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


cnta = [0] * (n + 1)
cntb = [0] * (n + 1)
for val in a:
    cnta[val] += 1
for val in b:
    cntb[n - val] += 1

conv = fft_convolve(cnta, cntb)

for i in range(n, n + q):
    print(conv[i])
0