提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |