結果
問題 | No.1307 Rotate and Accumulate |
ユーザー |
![]() |
提出日時 | 2020-12-05 05:05:28 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,584 ms / 5,000 ms |
コード長 | 1,150 bytes |
コンパイル時間 | 529 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 305,940 KB |
最終ジャッジ日時 | 2024-09-15 10:25:51 |
合計ジャッジ時間 | 16,058 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#!/usr/bin/env python3## No.1307 Rotate and Accumulate#import sys, os, mathdef fft(a, inverse=False):n = 1while n < len(a): n <<= 1if len(a) < n: a += [0] * (n - len(a))j, k = 0, 1for i in range(1, n):bit = n >> 1while j & bit: j ^= bit; bit >>= 1j ^= bitif i < j: a[i], a[j] = a[j], a[i]while k < n:wk = math.cos(math.pi / k) + math.sin(-math.pi / k if inverse else math.pi / k) * 1jfor i in range(0, n, 2 * k):w = 1 + 0jfor j in range(k):u, v = a[i + j], a[i + j + k] * wa[i + j] = u + va[i + j + k] = u - vw *= wkk *= 2if inverse:for i in range(n): a[i] /= ndef multiply(a, b):n = 1while n < len(a) + len(b): n <<= 1f, g, r = [0] * n, [0] * n, [0] * nfor i, v in enumerate(a): f[i] = vfor i, v in enumerate(b): g[i] = vfft(f); fft(g)for i in range(n): f[i] *= g[i]fft(f, True)for i, v in enumerate(f): r[i] = round(v.real)return rdef read_ints(): return list(map(int, input().split()))n, q = read_ints()a, r = read_ints(), read_ints()f = a + ag = [0] * (n + 1)for x in r: g[n - x] += 1c = multiply(f, g)print(" ".join(map(str, c[n:n + n])))