結果

問題 No.2215 Slide Subset Sum
ユーザー gew1fw
提出日時 2025-06-12 21:34:33
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,273 bytes
コンパイル時間 413 ms
コンパイル使用メモリ 81,960 KB
実行使用メモリ 848,860 KB
最終ジャッジ日時 2025-06-12 21:35:46
合計ジャッジ時間 6,126 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 2
other RE * 1 MLE * 1 -- * 43
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
import math
MOD = 998244353

def main():
    N, M, K = map(int, sys.stdin.readline().split())
    A = list(map(int, sys.stdin.readline().split()))
    r = [a % K for a in A]

    # Precompute ω^j for j in 0..K-1
    omega = []
    for j in range(K):
        angle = 2 * math.pi * j / K
        omega.append(complex(math.cos(angle), math.sin(angle)))

    # Precompute prefix[j][i]
    prefix = [ [ complex(0.0, 0.0) for _ in range(N+1)] for _ in range(K) ]
    for j in range(K):
        prefix[j][0] = complex(1.0, 0.0)
        for i in range(1, N+1):
            term = 1.0 + omega[j] ** (r[i-1])
            prefix[j][i] = prefix[j][i-1] * term

    # Process each window
    for k in range(1, N-M+2):
        end = k + M - 1
        res = 0.0
        for j in range(K):
            # Compute F(ω^j) = prefix[j][end] / prefix[j][k-1]
            numerator = prefix[j][end]
            denominator = prefix[j][k-1]
            if abs(denominator) < 1e-10:
                f = complex(0.0, 0.0)
            else:
                f = numerator / denominator
            res += f.real / K  # sum (F(ω^j) / K) for all j
        # The answer is (res - 1) mod MOD
        ans = (int(round(res)) - 1) % MOD
        print(ans)

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