Please sign in first.
Submission #16590103
Source Code Expand
H,W = gets.split.map(&:to_i)
r = *0..W # k 段目の状態。[落水点] -> 最近蛇口位置、もしくはスキップ情報。
r[0] = 1 # 位置 0 は欠番
dmin = 0 # 横移動距離 = 落水点 - 最近蛇口位置
nmin = [0]*W
nmin[dmin] = W # r に横移動距離 0 が W 個
puts $<.map.with_index(1){|ln,k|
next -1 if dmin < 0
a,b = ln.split.map(&:to_i)
i,c = a
until b < i
j = r[i]
if i < j
i = j # スキップ
else
c = j # 最近蛇口メモ
nmin[i-c] -= 1 # 落水点消滅につき距離カウント減算
i += 1
end
end
if c && b+1 < (r[b+1]||b) # b+1 に新しい落水点
r[b+1] = c
nmin[b+1-c] += 1
end
r.fill([r[b+1]||b+1,b+1].max,a..b)
dmin = (dmin...W).find{|d| 0<nmin[d] }||~k
next k+dmin
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - I hate Shortest Path Problem |
| User | ds14050 |
| Language | Ruby (2.7.1) |
| Score | 600 |
| Code Size | 786 Byte |
| Status | AC |
| Exec Time | 453 ms |
| Memory | 20816 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample00 |
| All | case01, case02, case03, case04, case05, case06, case07, case08, case09, case10, sample00 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| case01 | AC | 58 ms | 14144 KiB |
| case02 | AC | 161 ms | 16012 KiB |
| case03 | AC | 274 ms | 17156 KiB |
| case04 | AC | 453 ms | 20668 KiB |
| case05 | AC | 398 ms | 19476 KiB |
| case06 | AC | 439 ms | 20816 KiB |
| case07 | AC | 146 ms | 19232 KiB |
| case08 | AC | 209 ms | 20732 KiB |
| case09 | AC | 426 ms | 20652 KiB |
| case10 | AC | 419 ms | 17228 KiB |
| sample00 | AC | 59 ms | 14140 KiB |