結果
問題 |
No.2215 Slide Subset Sum
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:50:26 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,273 bytes |
コンパイル時間 | 314 ms |
コンパイル使用メモリ | 82,816 KB |
実行使用メモリ | 852,772 KB |
最終ジャッジ日時 | 2025-06-12 16:51:44 |
合計ジャッジ時間 | 6,073 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | RE * 1 MLE * 1 -- * 43 |
ソースコード
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()