結果
| 問題 | No.3391 Line up Dominoes |
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2026-01-03 00:43:04 |
| 言語 | Python3 (3.14.2 + numpy 2.4.0 + scipy 1.16.3) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,177 bytes |
| 記録 | |
| コンパイル時間 | 1,118 ms |
| コンパイル使用メモリ | 21,540 KB |
| 実行使用メモリ | 24,404 KB |
| 最終ジャッジ日時 | 2026-01-03 00:43:11 |
| 合計ジャッジ時間 | 6,573 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | TLE * 1 -- * 22 |
ソースコード
from bisect import bisect_left, bisect_right
from itertools import accumulate
def find_interval(a: list, lo: int, hi: int) -> tuple[int, int, int]:
"""
ソート済みリスト a の要素の lo 以上 hi 以下の個数と区間を返す
return: 範囲内の個数, l, r
"""
assert lo <= hi
empty = 0, -1, -1 # 区間なし
if not a or lo > a[-1] or hi < a[0]: return empty
l = bisect_left(a, lo)
r = bisect_right(a, hi) - 1
if l > r: return empty
return r-l+1, l, r
def mod_accum(a: list, mod: int):
acc = list(accumulate(a, lambda a, b: (a + b) % mod))
return lambda l, r: (acc[r] - (acc[l-1] if l > 0 else 0)) % mod
MOD = 998244353
N, M, K = map(int, input().split())
A = list(map(int, input().split()))
A.sort()
l_inds = []
r_inds = []
for i in range(N):
_, l, r = find_interval(A, A[i]-K, A[i]+K)
l_inds.append(l)
r_inds.append(r)
dp = [1] * N
for i in range(M-1):
pp = [0] * N
dp, pp = pp, dp
acc_dp = mod_accum(pp, MOD)
for j in range(N):
dp[j] += acc_dp(l_inds[j], r_inds[j])
dp[j] %= MOD
ans = 0
for i in range(N):
ans += dp[i]
ans %= MOD
print(ans)
norioc