提出 #70980315


ソースコード 拡げる

class Rect
	def initialize x,y,w,h
		@x,@y,@w,@h = x,y,w,h
	end

	attr_reader :x,:y
	def right; @x+@w end
	def top; @y+@h end
	def area; @w*@h end

	def splitx x,b
		if @x+@w<=x
			@y -= b
			[self]
		elsif x<=@x
			@y += b
			[self]
		else
			r = Rect.new x,@y+b,@x+@w-x,@h
			@y -= b
			@w = x-@x
			[self,r]
		end
	end

	def splity y,b
		if @y+@h<=y
			@x -= b
			[self]
		elsif y<=@y
			@x += b
			[self]
		else
			r = Rect.new @x+b,y,@w,@y+@h-y
			@x -= b
			@h = y-@y
			[self,r]
		end
	end
end

N,X,Y = gets.split.map(&:to_i)
rs = [Rect.new(0,0,X,Y)]
N.times{
	c,*ab = gets.split
	case c
	when ?X
		x,b = ab.map(&:to_i)
		rs = rs.flat_map{|r| r.splitx(x,b) }
	when ?Y
		y,b = ab.map(&:to_i)
		rs = rs.flat_map{|r| r.splity(y,b) }
	end
}

Z = rs.map(&:area)
G = [-1]*rs.size
F = lambda{|a|
	G[a]<0 ? a : G[a] = F[G[a]]
}
U = lambda{|a,b|
	a,b = F[a],F[b]
	next if a==b
#warn [rs[a],rs[b]].inspect
	a,b = b,a if G[b]<G[a]
	Z[a] += Z[b]
	G[a] += G[b]
	G[b] = a
}
X2G = rs.size.times.group_by{|g| rs[g].x }
R2G = rs.size.times.group_by{|g| rs[g].right }
Y2G = rs.size.times.group_by{|g| rs[g].y }
T2G = rs.size.times.group_by{|g| rs[g].top }

rs.each_with_index{|r,g|
	if gs = X2G[r.right]
		gs.each{|g2|
			r2 = rs[g2]
			if r.top<=r2.y || r2.top<=r.y
			else
				U[g,g2]
			end
		}
	end
	if gs = R2G[r.x]
		gs.each{|g2|
			r2 = rs[g2]
			if r.top<=r2.y || r2.top<=r.y
			else
				U[g,g2]
			end
		}
	end
	if gs = Y2G[r.top]
		gs.each{|g2|
			r2 = rs[g2]
			if r.right<=r2.x || r2.right<=r.x
			else
				U[g,g2]
			end
		}
	end
	if gs = T2G[r.y]
		gs.each{|g2|
			r2 = rs[g2]
			if r.right<=r2.x || r2.right<=r.x
			else
				U[g,g2]
			end
		}
	end
}

puts Z.values_at(*rs.size.times.map(&F).uniq).sort.tap{p _1.size}*' '

提出情報

提出日時
問題 D - Suddenly, A Tempest
ユーザ ds14050
言語 Ruby 3.4 (ruby 3.4.5)
得点 425
コード長 1840 Byte
結果 AC
実行時間 45 ms
メモリ 16160 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 425 / 425
結果
AC × 2
AC × 96
セット名 テストケース
Sample 00-sample-01.txt, 00-sample-02.txt
All 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt, 01-52.txt, 01-53.txt, 01-54.txt, 01-55.txt, 01-56.txt, 01-57.txt, 01-58.txt, 01-59.txt, 01-60.txt, 01-61.txt, 01-62.txt, 01-63.txt, 01-64.txt, 01-65.txt, 01-66.txt, 01-67.txt, 01-68.txt, 01-69.txt, 01-70.txt, 01-71.txt, 01-72.txt, 01-73.txt, 01-74.txt, 01-75.txt, 01-76.txt, 01-77.txt, 01-78.txt, 01-79.txt, 01-80.txt, 01-81.txt, 01-82.txt, 01-83.txt, 01-84.txt, 01-85.txt, 01-86.txt, 01-87.txt, 01-88.txt, 01-89.txt, 01-90.txt, 01-91.txt, 01-92.txt, 01-93.txt, 01-94.txt
ケース名 結果 実行時間 メモリ
00-sample-01.txt AC 35 ms 15288 KiB
00-sample-02.txt AC 45 ms 15828 KiB
01-01.txt AC 35 ms 15260 KiB
01-02.txt AC 35 ms 15260 KiB
01-03.txt AC 36 ms 15176 KiB
01-04.txt AC 36 ms 15224 KiB
01-05.txt AC 35 ms 15256 KiB
01-06.txt AC 36 ms 15192 KiB
01-07.txt AC 36 ms 15060 KiB
01-08.txt AC 37 ms 15560 KiB
01-09.txt AC 37 ms 15876 KiB
01-10.txt AC 36 ms 15496 KiB
01-11.txt AC 37 ms 15508 KiB
01-12.txt AC 37 ms 15712 KiB
01-13.txt AC 37 ms 15576 KiB
01-14.txt AC 37 ms 15644 KiB
01-15.txt AC 37 ms 15636 KiB
01-16.txt AC 37 ms 15760 KiB
01-17.txt AC 41 ms 15852 KiB
01-18.txt AC 38 ms 15836 KiB
01-19.txt AC 38 ms 15716 KiB
01-20.txt AC 36 ms 15324 KiB
01-21.txt AC 39 ms 15700 KiB
01-22.txt AC 41 ms 15780 KiB
01-23.txt AC 38 ms 15836 KiB
01-24.txt AC 38 ms 15700 KiB
01-25.txt AC 36 ms 15180 KiB
01-26.txt AC 36 ms 15120 KiB
01-27.txt AC 36 ms 15324 KiB
01-28.txt AC 36 ms 15120 KiB
01-29.txt AC 36 ms 15324 KiB
01-30.txt AC 36 ms 15264 KiB
01-31.txt AC 36 ms 15180 KiB
01-32.txt AC 36 ms 15120 KiB
01-33.txt AC 36 ms 15120 KiB
01-34.txt AC 36 ms 15280 KiB
01-35.txt AC 36 ms 15064 KiB
01-36.txt AC 36 ms 15064 KiB
01-37.txt AC 36 ms 15372 KiB
01-38.txt AC 36 ms 15228 KiB
01-39.txt AC 36 ms 15064 KiB
01-40.txt AC 36 ms 15120 KiB
01-41.txt AC 36 ms 15120 KiB
01-42.txt AC 36 ms 15180 KiB
01-43.txt AC 36 ms 15064 KiB
01-44.txt AC 36 ms 15264 KiB
01-45.txt AC 36 ms 15132 KiB
01-46.txt AC 36 ms 15320 KiB
01-47.txt AC 36 ms 15112 KiB
01-48.txt AC 36 ms 15300 KiB
01-49.txt AC 36 ms 15244 KiB
01-50.txt AC 36 ms 15260 KiB
01-51.txt AC 36 ms 15280 KiB
01-52.txt AC 36 ms 15040 KiB
01-53.txt AC 36 ms 15120 KiB
01-54.txt AC 36 ms 15112 KiB
01-55.txt AC 36 ms 15324 KiB
01-56.txt AC 36 ms 15084 KiB
01-57.txt AC 36 ms 15132 KiB
01-58.txt AC 35 ms 15112 KiB
01-59.txt AC 35 ms 15280 KiB
01-60.txt AC 36 ms 15260 KiB
01-61.txt AC 36 ms 15324 KiB
01-62.txt AC 36 ms 15200 KiB
01-63.txt AC 36 ms 15252 KiB
01-64.txt AC 36 ms 15324 KiB
01-65.txt AC 36 ms 15112 KiB
01-66.txt AC 36 ms 15228 KiB
01-67.txt AC 36 ms 15064 KiB
01-68.txt AC 36 ms 15320 KiB
01-69.txt AC 36 ms 15064 KiB
01-70.txt AC 36 ms 15320 KiB
01-71.txt AC 36 ms 15264 KiB
01-72.txt AC 36 ms 15196 KiB
01-73.txt AC 36 ms 15180 KiB
01-74.txt AC 36 ms 15236 KiB
01-75.txt AC 36 ms 15312 KiB
01-76.txt AC 36 ms 15064 KiB
01-77.txt AC 36 ms 15324 KiB
01-78.txt AC 36 ms 15264 KiB
01-79.txt AC 36 ms 15132 KiB
01-80.txt AC 36 ms 15112 KiB
01-81.txt AC 36 ms 15120 KiB
01-82.txt AC 36 ms 15180 KiB
01-83.txt AC 42 ms 16024 KiB
01-84.txt AC 43 ms 16132 KiB
01-85.txt AC 41 ms 15876 KiB
01-86.txt AC 43 ms 16024 KiB
01-87.txt AC 43 ms 16160 KiB
01-88.txt AC 40 ms 15692 KiB
01-89.txt AC 42 ms 15948 KiB
01-90.txt AC 43 ms 15936 KiB
01-91.txt AC 40 ms 15892 KiB
01-92.txt AC 43 ms 15924 KiB
01-93.txt AC 43 ms 16128 KiB
01-94.txt AC 41 ms 15692 KiB