Submission #31297214
Source Code Expand
macro make_array(value, *dims)
{% for dim in dims %} Array.new({{dim}}) { {% end %}
{{ value }}
{% for dim in dims %} } {% end %}
end
h, w = gets.to_s.split.map(&.to_i)
s = Array.new(h) { gets.to_s }
sy = sx = gy = gx = -1
g = Array.new(h) do |y|
Array.new(w) do |x|
case s[y][x]
when '1'..'9'
s[y][x].to_i
when 's'
sy = y
sx = x
0
when 'g'
gy = y
gx = x
10000000 # ゴールは無条件で進めるほど明るい
when '#'
-1
else
raise "bad input #{s[y][x]}"
end
end
end
pr = Problem.new(h, w, g, sy, sx, gy, gx)
ans = pr.solve
pp ans == 0.0 ? -1 : ans
class Problem
DIR = [{-1, 0}, {0, -1}, {1, 0}, {0, 1}]
INF = 1e9.to_i64
getter h : Int32
getter w : Int32
getter g : Array(Array(Int32))
getter sy : Int32
getter sx : Int32
getter gy : Int32
getter gx : Int32
def initialize(@h, @w, @g, @sy, @sx, @gy, @gx)
end
def solve
lo = 0.0
hi = 10.0
(lo..hi).bsearch do |v|
!query(v)
end
end
# 明るさvを保ったままゴールできるか
def query(v)
depth = make_array(INF, h, w)
depth[sy][sx] = 0
seen = make_array(false, h, w)
seen[sy][sx] = true
q = Deque.new([{sy, sx}])
while q.size > 0
y, x = q.shift
break if y == gy && x == gx
each(y, x) do |ny, nx|
next if wall?(ny, nx)
next if seen[ny][nx]
seen[ny][nx] = true
t = depth[y][x] + 1
next if g[ny][nx] * 0.99 ** t < v
depth[ny][nx] = t
q << {ny, nx}
end
end
depth[gy][gx] != INF
end
def outside?(y, x)
y < 0 || h <= y || x < 0 || w <= x
end
def wall?(y, x)
g[y][x] == -1
end
def each(y, x)
DIR.each do |dy, dx|
ny = y + dy
nx = x + dx
next if outside?(ny, nx)
yield ny, nx
end
end
end
Submission Info
| Submission Time | |
|---|---|
| Task | C - 暗闇帰り道 |
| User | tamura2004 |
| Language | Crystal (0.33.0) |
| Score | 100 |
| Code Size | 1962 Byte |
| Status | AC |
| Exec Time | 1535 ms |
| Memory | 12436 KiB |
Judge Result
| Set Name | all | ||
|---|---|---|---|
| Score / Max Score | 100 / 100 | ||
| Status |
|
| Set Name | Test Cases |
|---|---|
| all | 00_mini_01.txt, 00_mini_02.txt, 00_mini_03.txt, 00_mini_04.txt, 00_mini_05.txt, 00_sample_01.txt, 00_sample_02.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 02_maxrnd_01.txt, 02_maxrnd_02.txt, 02_maxrnd_03.txt, 02_maxrnd_04.txt, 02_maxrnd_05.txt, 02_maxrnd_06.txt, 02_maxrnd_07.txt, 02_maxrnd_08.txt, 02_maxrnd_09.txt, 02_maxrnd_10.txt, 02_maxrnd_11.txt, 02_maxrnd_12.txt, 02_maxrnd_13.txt, 02_maxrnd_14.txt, 02_maxrnd_15.txt, 02_maxrnd_16.txt, 02_maxrnd_17.txt, 02_maxrnd_18.txt, 02_maxrnd_19.txt, 03_hard_01.txt, 03_hard_02.txt, 03_hard_03.txt, 03_hard_04.txt, 03_hard_05.txt, 03_hard_06.txt, 03_hard_07.txt, 03_hard_08.txt, 04_open_01.txt, 04_open_02.txt, 05_minihard_01.txt, 05_minihard_02.txt, 05_minihard_03.txt, 05_minihard_04.txt, 05_minihard_05.txt, 05_minihard_06.txt, 05_minihard_07.txt, 05_minihard_08.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_mini_01.txt | AC | 12 ms | 3800 KiB |
| 00_mini_02.txt | AC | 3 ms | 3820 KiB |
| 00_mini_03.txt | AC | 3 ms | 3760 KiB |
| 00_mini_04.txt | AC | 4 ms | 3844 KiB |
| 00_mini_05.txt | AC | 3 ms | 3664 KiB |
| 00_sample_01.txt | AC | 7 ms | 4084 KiB |
| 00_sample_02.txt | AC | 5 ms | 4116 KiB |
| 01_rnd_01.txt | AC | 1151 ms | 10256 KiB |
| 01_rnd_02.txt | AC | 192 ms | 7476 KiB |
| 01_rnd_03.txt | AC | 41 ms | 6648 KiB |
| 01_rnd_04.txt | AC | 111 ms | 6632 KiB |
| 01_rnd_05.txt | AC | 27 ms | 5324 KiB |
| 01_rnd_06.txt | AC | 11 ms | 4976 KiB |
| 01_rnd_07.txt | AC | 44 ms | 5972 KiB |
| 01_rnd_08.txt | AC | 266 ms | 8828 KiB |
| 01_rnd_09.txt | AC | 396 ms | 10224 KiB |
| 01_rnd_10.txt | AC | 517 ms | 12436 KiB |
| 01_rnd_11.txt | AC | 283 ms | 8700 KiB |
| 01_rnd_12.txt | AC | 184 ms | 7436 KiB |
| 01_rnd_13.txt | AC | 51 ms | 6684 KiB |
| 01_rnd_14.txt | AC | 702 ms | 8732 KiB |
| 01_rnd_15.txt | AC | 311 ms | 8676 KiB |
| 01_rnd_16.txt | AC | 34 ms | 7464 KiB |
| 01_rnd_17.txt | AC | 342 ms | 8700 KiB |
| 01_rnd_18.txt | AC | 14 ms | 5436 KiB |
| 01_rnd_19.txt | AC | 35 ms | 6712 KiB |
| 01_rnd_20.txt | AC | 16 ms | 5612 KiB |
| 02_maxrnd_01.txt | AC | 404 ms | 10332 KiB |
| 02_maxrnd_02.txt | AC | 288 ms | 10224 KiB |
| 02_maxrnd_03.txt | AC | 422 ms | 10188 KiB |
| 02_maxrnd_04.txt | AC | 717 ms | 10344 KiB |
| 02_maxrnd_05.txt | AC | 437 ms | 10316 KiB |
| 02_maxrnd_06.txt | AC | 1363 ms | 10120 KiB |
| 02_maxrnd_07.txt | AC | 191 ms | 10224 KiB |
| 02_maxrnd_08.txt | AC | 135 ms | 10268 KiB |
| 02_maxrnd_09.txt | AC | 1319 ms | 10252 KiB |
| 02_maxrnd_10.txt | AC | 269 ms | 10264 KiB |
| 02_maxrnd_11.txt | AC | 1226 ms | 10404 KiB |
| 02_maxrnd_12.txt | AC | 613 ms | 10232 KiB |
| 02_maxrnd_13.txt | AC | 803 ms | 10276 KiB |
| 02_maxrnd_14.txt | AC | 962 ms | 10244 KiB |
| 02_maxrnd_15.txt | AC | 209 ms | 10380 KiB |
| 02_maxrnd_16.txt | AC | 749 ms | 10216 KiB |
| 02_maxrnd_17.txt | AC | 693 ms | 10276 KiB |
| 02_maxrnd_18.txt | AC | 118 ms | 10280 KiB |
| 02_maxrnd_19.txt | AC | 108 ms | 10248 KiB |
| 03_hard_01.txt | AC | 1503 ms | 10216 KiB |
| 03_hard_02.txt | AC | 1486 ms | 10264 KiB |
| 03_hard_03.txt | AC | 505 ms | 10292 KiB |
| 03_hard_04.txt | AC | 515 ms | 10380 KiB |
| 03_hard_05.txt | AC | 1522 ms | 10320 KiB |
| 03_hard_06.txt | AC | 1457 ms | 10356 KiB |
| 03_hard_07.txt | AC | 499 ms | 10412 KiB |
| 03_hard_08.txt | AC | 522 ms | 10356 KiB |
| 04_open_01.txt | AC | 1535 ms | 10220 KiB |
| 04_open_02.txt | AC | 1463 ms | 10276 KiB |
| 05_minihard_01.txt | AC | 16 ms | 4780 KiB |
| 05_minihard_02.txt | AC | 15 ms | 4804 KiB |
| 05_minihard_03.txt | AC | 10 ms | 4876 KiB |
| 05_minihard_04.txt | AC | 13 ms | 4764 KiB |
| 05_minihard_05.txt | AC | 15 ms | 4852 KiB |
| 05_minihard_06.txt | AC | 13 ms | 4688 KiB |
| 05_minihard_07.txt | AC | 10 ms | 4752 KiB |
| 05_minihard_08.txt | AC | 13 ms | 4764 KiB |