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
AC × 1
AC × 11
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