AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説...

12
AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo

Transcript of AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説...

Page 1: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

AtCoder Beginner Contest 091

C - 2D Plane 2N Points

非公式解説

@Ichijyo_piyo

Page 2: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

問題概要

・赤い点の座標が 𝑎1, 𝑏1 , 𝑎2, 𝑏2 , … , 𝑎𝑁, 𝑏𝑁 で,青い点の座

標が 𝑐1, 𝑑1 , 𝑐2, 𝑑2 , … , 𝑐𝑁, 𝑑𝑁 で与えられる.

・赤・青のペアをできるだけ多く作る.

・ペアになれる条件は,赤い点が青い点の左下に位置してい

ることである.

1

Page 3: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解法の概要

~入力例4~ 解法1:公式解説に書かれてい

る方法(貪欲法)

解法2:二部グラフの最大マッ

チング問題として考える(公式

解説中の“余談”)

本スライドでは“解法1”を説明す

る.

2

Page 4: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(1/8)

~入力例4~ • 青い点のうち,最も𝑥座標が小

さいもの(bAとする)に注目

する.

• bAはペアになれる赤い点が存

在した場合,最も𝑦座標が大き

いもの(rAとする)とペアにす

ればよい.(証明は略)

bArA

×

この点はbAとはペアになれません

3

Page 5: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(2/8)

~入力例4~ 青い点を𝑥座標の小さい順に見ていく

• 青い点より左下にある,まだペア

になっていない赤い点を探す.

(なかったらなにもしない)

• あったら,その中で最も最も𝑦座

標が大きいものを探し,ペアにす

る.

ペア

4

Page 6: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(3/8)

~入力例4~ 青い点を𝑥座標の小さい順に見ていく

• ペア1:青(3, 7)-赤(1, 6)

1

5

Page 7: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(4/8)

~入力例4~ 青い点を𝑥座標の小さい順に見ていく

• ペア1:青(3, 7)-赤(1, 6)

• ペア2:青(5, 4)-赤(1, 6)1

2

6

Page 8: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(5/8)

~入力例4~ 青い点を𝑥座標の小さい順に見ていく

• ペア1:青(3, 7)-赤(1, 6)

• ペア2:青(5, 4)-赤(1, 6)

• ペア3:青(6, 9)-赤(4, 8)

1

2

3

7

Page 9: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(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

Page 10: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(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

Page 11: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

解説(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

Page 12: AtCoder Beginner Contest 091...AtCoder Beginner Contest 091 C - 2D Plane 2N Points 非公式解説 @Ichijyo_piyo 問題概要 ・赤い点の座標が 1, 1, 2, 2,…, 𝑁, 𝑁で,青い点の座

参考資料

・Kohei Morita(yosupo),「ARC 091/ABC 090 解説」,

<https://img.atcoder.jp/arc092/editorial.pdf>

11