結果

問題 No.2877 Gunegune Hyperion
ユーザー 寝癖寝癖
提出日時 2024-08-30 01:52:23
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,284 bytes
コンパイル時間 233 ms
コンパイル使用メモリ 12,544 KB
実行使用メモリ 361,600 KB
最終ジャッジ日時 2024-09-15 09:08:44
合計ジャッジ時間 69,803 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 526 ms
44,480 KB
testcase_01 AC 523 ms
44,288 KB
testcase_02 AC 525 ms
43,904 KB
testcase_03 AC 1,305 ms
128,688 KB
testcase_04 AC 1,374 ms
132,424 KB
testcase_05 AC 2,404 ms
200,164 KB
testcase_06 AC 2,547 ms
208,060 KB
testcase_07 AC 2,538 ms
208,964 KB
testcase_08 AC 2,446 ms
203,056 KB
testcase_09 AC 2,250 ms
207,564 KB
testcase_10 AC 5,009 ms
352,888 KB
testcase_11 AC 2,311 ms
199,972 KB
testcase_12 AC 881 ms
84,760 KB
testcase_13 AC 1,350 ms
129,648 KB
testcase_14 AC 923 ms
87,372 KB
testcase_15 AC 2,268 ms
199,712 KB
testcase_16 AC 5,284 ms
359,048 KB
testcase_17 AC 5,279 ms
356,080 KB
testcase_18 AC 1,305 ms
128,460 KB
testcase_19 AC 1,463 ms
134,448 KB
testcase_20 AC 564 ms
46,036 KB
testcase_21 AC 5,006 ms
353,076 KB
testcase_22 AC 2,390 ms
200,376 KB
testcase_23 AC 5,242 ms
357,476 KB
testcase_24 AC 5,122 ms
354,428 KB
testcase_25 AC 5,554 ms
360,548 KB
testcase_26 AC 1,370 ms
132,880 KB
testcase_27 AC 2,427 ms
208,484 KB
testcase_28 AC 5,455 ms
361,600 KB
testcase_29 AC 5,499 ms
361,216 KB
testcase_30 AC 5,508 ms
361,344 KB
testcase_31 TLE -
testcase_32 AC 5,601 ms
361,332 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import numpy as np

fft, ifft = np.fft.rfft, np.fft.irfft


def convolve(f, g):
    fft_len = 1
    while 2 * fft_len < len(f) + len(g) - 1:
        fft_len *= 2
    fft_len *= 2
    h = ifft(fft(f, fft_len, axis=0) @ fft(g, fft_len, axis=0), fft_len, axis=0)
    h = np.rint(h).astype(np.int64)
    return h[: len(f) + len(g) - 1]


def convolution(f, g, p=998244353):
    f1, f2 = np.divmod(f, 1 << 15)
    g1, g2 = np.divmod(g, 1 << 15)
    a, c = convolve(f1, g1) % p, convolve(f2, g2) % p
    b = (convolve(f1 + f2, g1 + g2) - a - c) % p
    return ((a << 30) + (b << 15) + c) % p


def poly_pow(f, n, p=998244353):
    res = np.eye(3, dtype=np.int64).reshape(1, 3, 3)
    while n:
        if n & 1:
            res = convolution(res, f, p)
        f = convolution(f, f, p)
        n >>= 1
    return res


def main():
    mod = 998244353
    P = np.array(
        [
            [[499122177, 0, 0], [332748118, 0, 0], [0, 0, 0]],
            [[0, 499122177, 0], [0, 332748118, 332748118], [0, 665496236, 332748118]],
        ]
    )
    v = np.array([[199648871, 0, 0], [0, 199648871, 598946612]])
    N, H = map(int, input().split())
    P = poly_pow(P, N - 1, mod)
    print(sum(np.sum(v[i] @ P[H - i :] % mod) for i in range(2)) % mod)


if __name__ == "__main__":
    main()
0