結果
問題 |
No.2003 Frog on Grid
|
ユーザー |
![]() |
提出日時 | 2025-06-12 19:57:14 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,050 bytes |
コンパイル時間 | 205 ms |
コンパイル使用メモリ | 81,904 KB |
実行使用メモリ | 89,900 KB |
最終ジャッジ日時 | 2025-06-12 19:58:38 |
合計ジャッジ時間 | 9,264 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 TLE * 1 -- * 11 |
ソースコード
import bisect MOD = 998244353 def main(): import sys input = sys.stdin.read data = input().split() idx = 0 H = int(data[idx]) idx += 1 W = int(data[idx]) idx += 1 K = int(data[idx]) idx += 1 grid = [] for _ in range(H): row = data[idx] idx += 1 grid.append(row) dp = [[0] * (W + 1) for _ in range(H + 1)] if grid[0][0] == '.': dp[1][1] = 1 else: dp[1][1] = 0 x_list = {} prefix_sum = {} for d in range(2, H + W + 1): x_list[d] = [] prefix_sum[d] = [0] x_list[2] = [1] prefix_sum[2] = [0, dp[1][1]] for d in range(3, H + W + 1): for i in range(max(1, d - W), min(H, d - 1) + 1): j = d - i if j < 1 or j > W: continue if grid[i-1][j-1] == '#': dp[i][j] = 0 else: s_total = 0 for s in range(1, K+1): d_prime = d - s if d_prime < 2: continue x_start = max(1, d_prime - j) x_end = min(i, d_prime - 1) if x_start > x_end: continue lst = x_list.get(d_prime, []) if not lst: continue left = bisect.bisect_left(lst, x_start) if left >= len(lst): continue right = bisect.bisect_right(lst, x_end) - 1 if right < 0 or right < left: continue ps = prefix_sum[d_prime] sum_val = ps[right + 1] - ps[left] s_total += sum_val s_total %= MOD dp[i][j] = s_total x_list[d].append(i) new_sum = prefix_sum[d][-1] + dp[i][j] prefix_sum[d].append(new_sum) print(dp[H][W] % MOD) if __name__ == '__main__': main()