結果
問題 |
No.8046 yukicoderの過去問
|
ユーザー |
![]() |
提出日時 | 2020-11-06 15:24:47 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,068 bytes |
コンパイル時間 | 92 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 71,420 KB |
最終ジャッジ日時 | 2024-07-22 11:47:42 |
合計ジャッジ時間 | 6,909 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 4 TLE * 5 |
ソースコード
import numpy as np mod = 1000000007 def convolution(a, b): n = len(a) m = len(b) l = n + m - 1 z = 1 << (l - 1).bit_length() ah, al = a >> 15, a & ((1 << 15) - 1) bh, bl = b >> 15, b & ((1 << 15) - 1) p = np.rint(np.fft.irfft(np.fft.rfft(al, z) * np.fft.rfft(bl, z))[:l]).astype(np.int64) r = np.rint(np.fft.irfft(np.fft.rfft(ah, z) * np.fft.rfft(bh, z))[:l]).astype(np.int64) q = np.rint(np.fft.irfft(np.fft.rfft(al + ah, z) * np.fft.rfft(bl + bh, z))[:l]).astype(np.int64) - p - r return ((p + (q << 15)) + (r << 30)) % mod #[x^n]P/Qを求める def poly_coef(Q, P, n): while n: R = np.empty_like(Q) R[::2] = Q[::2] R[1::2] = -Q[1::2] P = convolution(P, R) Q = convolution(Q, R) P = P[n & 1::2] Q = Q[::2] n >>= 1 return P[0] import sys input = sys.stdin.readline k = int(input()) n = int(input()) X = np.array(list(map(int, input().split()))) Q = np.zeros(k+1, dtype=np.int64) Q[0] = 1 Q[X] = -1 P = np.array([1]) ans = poly_coef(Q, P, k) print(ans)