結果
| 問題 |
No.659 徘徊迷路
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-03-02 23:23:50 |
| 言語 | Ruby (3.4.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,176 bytes |
| コンパイル時間 | 454 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 19,488 KB |
| 最終ジャッジ日時 | 2024-06-22 11:03:45 |
| 合計ジャッジ時間 | 5,392 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 3 TLE * 1 -- * 8 |
コンパイルメッセージ
Syntax OK
ソースコード
R, C, T = gets.split.map &:to_i
Sy, Sx = gets.split.map &:to_i
Gy, Gx = gets.split.map &:to_i
Board = $<.map{|s|s.chomp.chars}
# 偶奇が合わない
man_dist = ((Sy+Sx) - (Gy+Gx)).abs
if man_dist & 1 != T & 1
p 0
exit
end
DIRS = [[1,0],[-1,0],[0,1],[0,-1]]
# スタート地点から動けない
if DIRS.all?{|(dy, dx)| Board[Sy+dy][Sx+dx] == ?# }
p Sy == Gy && Sx == Gx ? 1 : 0
exit
end
# 行き止まり
used = R.times.map{ [p]*C }
dfs = ->y, x{
return if used[y][x] || Board[y][x] == ?#
used[y][x] = true
DIRS.each{|(dy,dx)|
dfs[y+dy, x+dx]
}
}
dfs[Sy, Sx]
if !used[Gy][Gx]
p 0
exit
end
dirss = R.times.map{ [p]*C }
(1...R).each{|y|
(1...C).each{|x|
next if Board[y][x] == ?#
dirss[y][x] = DIRS.select{|(dy,dx)|
Board[y+dy][x+dx] != ?#
}
}
}
probs = R.times.map{ [0r]*C }
probs[Sy][Sx] = 1r
[T, 1000+T%2].min.times{
next_probs = R.times.map{ [0r]*C }
(1...R).each{|y|
(1...C).each{|x|
next if Board[y][x] == ?#
prob = probs[y][x]
dirs = dirss[y][x]
dirs.each{|(dy, dx)|
next_probs[y+dy][x+dx] += prob * 1r / dirs.size
}
}
}
probs = next_probs
}
p probs[Gy][Gx].to_f