結果
| 問題 | No.659 徘徊迷路 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-11-02 20:27:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,341 bytes |
| 記録 | |
| コンパイル時間 | 159 ms |
| コンパイル使用メモリ | 82,388 KB |
| 実行使用メモリ | 85,220 KB |
| 最終ジャッジ日時 | 2024-09-14 23:16:17 |
| 合計ジャッジ時間 | 21,273 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 5 TLE * 7 |
ソースコード
def mat_mul(A, B):
C = [[0]*len(B[0]) for _ in range(len(A))]
for i in range(len(A)):
for j in range(len(B[0])):
C[i][j] = sum(A[i][k]*B[k][j] for k in range(len(A[0])))
return C
def mat_pow(A, n):
res = [[0]*len(A) for _ in range(len(A))]
for i in range(len(A)):
res[i][i] = 1
while n > 0:
if n&1:
res = mat_mul(A, res)
n >>= 1
A = mat_mul(A, A)
return res
R, C, T = map(int, input().split())
Sx, Sy = map(int, input().split())
Gx, Gy = map(int, input().split())
B = [input() for _ in range(R)]
#変換行列Tr: Tr[i][j]: jからiへ移動する確率
Tr = [[0]*(R*C) for _ in range(R*C)]
for i in range(R):
for j in range(C):
if B[i][j] == '#':
continue
cnt = 0
for ni, nj in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:
if B[ni][nj] == '.':
cnt += 1
if cnt == 0:
Tr[C*i+j][C*i+j] = 1
continue
p = 1/cnt
for ni, nj in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:
if B[ni][nj] == '.':
Tr[C*ni+nj][C*i+j] = p
before = [[0] for _ in range(R*C)]
before[C*Sx+Sy][0] = 1
after = mat_mul(mat_pow(Tr, T), before)
print(after[C*Gx+Gy][0])