Submission #21369345
Source Code Expand
import sys
import numpy as np
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
MOD = 998_244_353
def from_read(dtype=np.int64):
return np.fromstring(read().decode(), dtype=dtype, sep=' ')
def from_readline(dtype=np.int64):
return np.fromstring(readline().decode(), dtype=dtype, sep=' ')
def fact_table(N=1 << 20):
N += 1
fact = np.empty(N, np.int64)
fact[0] = 1
for n in range(1, N):
fact[n] = n * fact[n - 1] % MOD
fact_inv = np.empty(N, np.int64)
fact_inv[N - 1] = pow(int(fact[N - 1]), -1, MOD)
for n in range(N - 1, 0, -1):
fact_inv[n - 1] = fact_inv[n] * n % MOD
inv = np.empty(N, np.int64)
inv[0] = 0
inv[1:] = fact[:-1] * fact_inv[1:] % MOD
return fact, fact_inv, inv
def fft_convolve(f, g):
"""
数列 (多項式) f, g の畳み込みの計算.上下 15 bitずつ分けて計算することで,
30 bit以下の整数,長さ 250000 程度の数列での計算が正確に行える.
"""
Lf, Lg = f.shape[-1], g.shape[-1]
L = Lf + Lg - 1
fft_len = 1 << L.bit_length()
fh, fl = f >> 15, f & (1 << 15) - 1
gh, gl = g >> 15, g & (1 << 15) - 1
Ffh = np.fft.rfft(fh, fft_len)
Ffl = np.fft.rfft(fl, fft_len)
Fgh = np.fft.rfft(gh, fft_len)
Fgl = np.fft.rfft(gl, fft_len)
a = np.rint(np.fft.irfft(Ffh * Fgh)).astype(np.int64) % MOD
b = np.rint(np.fft.irfft(Ffh * Fgl + Ffl * Fgh)).astype(np.int64) % MOD
c = np.rint(np.fft.irfft(Ffl * Fgl)).astype(np.int64) % MOD
h = (a << 30) + (b << 15) + c
return h[:L] % MOD
def main(N, M):
fact, fact_inv, inv = fact_table(N + M + 10)
C = fact[N] * fact_inv[:N + 1] % MOD * fact_inv[:N + 1][::-1] % MOD
C = C[::2]
C = np.append(C, np.zeros(M, np.int64))
"""
和 → 数え
"""
dp = np.ones(1, np.int64)
dp[0] = 1
while len(dp) <= M:
newdp = np.zeros(2 * len(dp), np.int64)
newdp[::2] = fft_convolve(dp, C[:len(dp)])[:len(dp)]
dp = newdp
return dp[M]
N, M = from_read()
print(main(N, M))
Submission Info
| Submission Time | |
|---|---|
| Task | D - I Wanna Win The Game |
| User | maspy |
| Language | Python (3.8.2) |
| Score | 500 |
| Code Size | 2175 Byte |
| Status | AC |
| Exec Time | 127 ms |
| Memory | 27908 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00-Sample-00, 00-Sample-01, 00-Sample-02 |
| All | 00-Sample-00, 00-Sample-01, 00-Sample-02, 01-Handmade-00, 01-Handmade-01, 01-Handmade-02, 01-Handmade-03, 01-Handmade-04, 01-Handmade-05, 02-Small-00, 02-Small-01, 02-Small-02, 02-Small-03, 02-Small-04, 02-Small-05, 02-Small-06, 02-Small-07, 02-Small-08, 02-Small-09, 02-Small-10, 02-Small-11, 02-Small-12, 02-Small-13, 02-Small-14, 02-Small-15, 02-Small-16, 02-Small-17, 02-Small-18, 02-Small-19, 03-Large-00, 03-Large-01, 03-Large-02, 03-Large-03, 03-Large-04, 03-Large-05, 03-Large-06, 03-Large-07, 03-Large-08, 03-Large-09, 03-Large-10, 03-Large-11, 03-Large-12, 03-Large-13, 03-Large-14, 03-Large-15, 03-Large-16, 03-Large-17, 03-Large-18, 03-Large-19, 03-Large-20, 03-Large-21, 03-Large-22, 03-Large-23, 03-Large-24, 03-Large-25, 03-Large-26, 03-Large-27, 03-Large-28, 03-Large-29, 03-Large-30, 03-Large-31, 03-Large-32, 03-Large-33, 03-Large-34, 03-Large-35, 03-Large-36, 03-Large-37, 03-Large-38, 03-Large-39 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00-Sample-00 | AC | 117 ms | 26852 KiB |
| 00-Sample-01 | AC | 107 ms | 26932 KiB |
| 00-Sample-02 | AC | 119 ms | 27416 KiB |
| 01-Handmade-00 | AC | 108 ms | 26980 KiB |
| 01-Handmade-01 | AC | 117 ms | 27716 KiB |
| 01-Handmade-02 | AC | 114 ms | 27376 KiB |
| 01-Handmade-03 | AC | 123 ms | 27776 KiB |
| 01-Handmade-04 | AC | 110 ms | 26800 KiB |
| 01-Handmade-05 | AC | 116 ms | 27212 KiB |
| 02-Small-00 | AC | 111 ms | 27044 KiB |
| 02-Small-01 | AC | 110 ms | 27072 KiB |
| 02-Small-02 | AC | 109 ms | 26932 KiB |
| 02-Small-03 | AC | 108 ms | 26936 KiB |
| 02-Small-04 | AC | 112 ms | 26928 KiB |
| 02-Small-05 | AC | 109 ms | 27052 KiB |
| 02-Small-06 | AC | 108 ms | 26928 KiB |
| 02-Small-07 | AC | 110 ms | 27184 KiB |
| 02-Small-08 | AC | 108 ms | 26924 KiB |
| 02-Small-09 | AC | 109 ms | 27012 KiB |
| 02-Small-10 | AC | 110 ms | 27200 KiB |
| 02-Small-11 | AC | 111 ms | 26948 KiB |
| 02-Small-12 | AC | 109 ms | 26948 KiB |
| 02-Small-13 | AC | 106 ms | 26816 KiB |
| 02-Small-14 | AC | 108 ms | 26976 KiB |
| 02-Small-15 | AC | 110 ms | 26928 KiB |
| 02-Small-16 | AC | 107 ms | 27020 KiB |
| 02-Small-17 | AC | 109 ms | 26928 KiB |
| 02-Small-18 | AC | 109 ms | 27008 KiB |
| 02-Small-19 | AC | 108 ms | 26824 KiB |
| 03-Large-00 | AC | 121 ms | 27704 KiB |
| 03-Large-01 | AC | 121 ms | 27908 KiB |
| 03-Large-02 | AC | 116 ms | 27372 KiB |
| 03-Large-03 | AC | 115 ms | 27256 KiB |
| 03-Large-04 | AC | 118 ms | 27576 KiB |
| 03-Large-05 | AC | 127 ms | 27764 KiB |
| 03-Large-06 | AC | 126 ms | 27868 KiB |
| 03-Large-07 | AC | 120 ms | 27260 KiB |
| 03-Large-08 | AC | 112 ms | 27212 KiB |
| 03-Large-09 | AC | 116 ms | 27532 KiB |
| 03-Large-10 | AC | 113 ms | 27156 KiB |
| 03-Large-11 | AC | 121 ms | 27672 KiB |
| 03-Large-12 | AC | 121 ms | 27376 KiB |
| 03-Large-13 | AC | 116 ms | 27200 KiB |
| 03-Large-14 | AC | 114 ms | 26944 KiB |
| 03-Large-15 | AC | 116 ms | 27200 KiB |
| 03-Large-16 | AC | 116 ms | 27488 KiB |
| 03-Large-17 | AC | 113 ms | 27180 KiB |
| 03-Large-18 | AC | 118 ms | 27312 KiB |
| 03-Large-19 | AC | 115 ms | 27184 KiB |
| 03-Large-20 | AC | 120 ms | 27796 KiB |
| 03-Large-21 | AC | 122 ms | 27896 KiB |
| 03-Large-22 | AC | 123 ms | 27776 KiB |
| 03-Large-23 | AC | 116 ms | 27536 KiB |
| 03-Large-24 | AC | 113 ms | 27268 KiB |
| 03-Large-25 | AC | 122 ms | 27404 KiB |
| 03-Large-26 | AC | 117 ms | 27152 KiB |
| 03-Large-27 | AC | 116 ms | 27444 KiB |
| 03-Large-28 | AC | 117 ms | 27472 KiB |
| 03-Large-29 | AC | 126 ms | 27828 KiB |
| 03-Large-30 | AC | 112 ms | 27168 KiB |
| 03-Large-31 | AC | 117 ms | 27568 KiB |
| 03-Large-32 | AC | 119 ms | 27356 KiB |
| 03-Large-33 | AC | 120 ms | 27504 KiB |
| 03-Large-34 | AC | 122 ms | 27692 KiB |
| 03-Large-35 | AC | 116 ms | 27364 KiB |
| 03-Large-36 | AC | 112 ms | 27260 KiB |
| 03-Large-37 | AC | 118 ms | 27472 KiB |
| 03-Large-38 | AC | 121 ms | 27332 KiB |
| 03-Large-39 | AC | 115 ms | 27300 KiB |