AtCoder Beginner Contest 091
C - 2D Plane 2N Points
非公式解説
@Ichijyo_piyo
問題概要
・赤い点の座標が 𝑎1, 𝑏1 , 𝑎2, 𝑏2 , … , 𝑎𝑁, 𝑏𝑁 で,青い点の座
標が 𝑐1, 𝑑1 , 𝑐2, 𝑑2 , … , 𝑐𝑁, 𝑑𝑁 で与えられる.
・赤・青のペアをできるだけ多く作る.
・ペアになれる条件は,赤い点が青い点の左下に位置してい
ることである.
1
解法の概要
~入力例4~ 解法1:公式解説に書かれてい
る方法(貪欲法)
解法2:二部グラフの最大マッ
チング問題として考える(公式
解説中の“余談”)
本スライドでは“解法1”を説明す
る.
2
解説(1/8)
~入力例4~ • 青い点のうち,最も𝑥座標が小
さいもの(bAとする)に注目
する.
• bAはペアになれる赤い点が存
在した場合,最も𝑦座標が大き
いもの(rAとする)とペアにす
ればよい.(証明は略)
bArA
×
この点はbAとはペアになれません
3
解説(2/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• 青い点より左下にある,まだペア
になっていない赤い点を探す.
(なかったらなにもしない)
• あったら,その中で最も最も𝑦座
標が大きいものを探し,ペアにす
る.
ペア
4
解説(3/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• ペア1:青(3, 7)-赤(1, 6)
1
5
解説(4/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• ペア1:青(3, 7)-赤(1, 6)
• ペア2:青(5, 4)-赤(1, 6)1
2
6
解説(5/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• ペア1:青(3, 7)-赤(1, 6)
• ペア2:青(5, 4)-赤(1, 6)
• ペア3:青(6, 9)-赤(4, 8)
1
2
3
7
解説(6/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• ペア1:青(3, 7)-赤(1, 6)
• ペア2:青(5, 4)-赤(1, 6)
• ペア3:青(6, 9)-赤(4, 8)
• ペア4:青(8, 5)-赤(7, 3)
1
2
3
4
8
解説(7/8)
~入力例4~ 青い点を𝑥座標の小さい順に見ていく
• ペア1:青(3, 7)-赤(1, 6)
• ペア2:青(5, 4)-赤(1, 6)
• ペア3:青(6, 9)-赤(4, 8)
• ペア4:青(8, 5)-赤(7, 3)
• ペア5:青(9, 1)-赤(0, 0)
1
2
3
5
9
4
解説(8/8)
~入力例4~ • ペア1:青(3, 7)-赤(1, 6)
• ペア2:青(5, 4)-赤(1, 6)
• ペア3:青(6, 9)-赤(4, 8)
• ペア4:青(8, 5)-赤(7, 3)
• ペア5:青(9, 1)-赤(0, 0)
よって,5通り
1
2
3
5
10
4
参考資料
・Kohei Morita(yosupo),「ARC 091/ABC 090 解説」,
<https://img.atcoder.jp/arc092/editorial.pdf>
11