結果
| 問題 |
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 |
ソースコード
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()
gew1fw