結果
| 問題 |
No.2003 Frog on Grid
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 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()
gew1fw