立命合宿2016day3:c問題

23
Lorem Ipsum Dolor C:成長する点 問題文:栗田和宏 原案:鈴木浩史

Upload: hcpc-

Post on 20-Jan-2017

112 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 立命合宿2016Day3:C問題

Lorem Ipsum Dolor

C:成長する点 問題文:栗田和宏 原案:鈴木浩史

Page 2: 立命合宿2016Day3:C問題

問題概要❖ 番号0である粘菌の拠点が1つとN個の餌が存在する.

❖ 餌には1からNまでの番号が与えられている.

❖ 粘菌はある餌を食べるために,その餌と最も近い拠点の最短距離を結ぶ管状に成長し,食べた位置に新たに拠点を形成する.以降では粘菌は複数の線分として考える.

❖ すべての拠点と線分からなる構造を粘菌網と呼ぶ

Page 3: 立命合宿2016Day3:C問題

問題概要❖ 以下の操作をM回繰り返した後の線分の長さの合計を求め

よ.

1. まだ食べていない餌の中で粘菌網に最も近い餌を選ぶ.そのような餌が複数存在する場合は番号が最も小さい餌を選ぶ

2. 選んだ餌と最も近い拠点を選ぶ.そのような拠点が複数存在する場合は,最も拠点の番号が小さいものから取る.

3. 選んだ拠点と餌を結ぶ線分を引く.以降ではこのとき選んだ餌も拠点として扱う.

Page 4: 立命合宿2016Day3:C問題

問題の制約❖ 0 ≦ N ≦ 5000

❖ 0 ≦ M ≦ N

❖ -5000 ≦ X,Y ≦ 5000

❖ -5000 ≦ pxi, pyi ≦ 5000

Page 5: 立命合宿2016Day3:C問題

例題

餌4

拠点0 餌1

餌2 餌3

1 2 3

1

3

2

M = 4

Page 6: 立命合宿2016Day3:C問題

例題

餌4

拠点0 餌1

餌2 餌3

1 2 3

1

3

2

2

2

√5

2√2

距離2の餌が2つあるが, 番号が小さい餌1が選ばられる.

M = 4

Page 7: 立命合宿2016Day3:C問題

例題

餌4

拠点0 拠点1

餌2 餌3

1 2 3

1

3

2 2

√5

2√2

M = 4

Page 8: 立命合宿2016Day3:C問題

例題

餌4

拠点0 拠点1

餌2 餌3

1 2 3

1

3

22 2 2

餌と粘菌網の距離が 更新される.

M = 4

Page 9: 立命合宿2016Day3:C問題

例題

餌4

拠点0 拠点1

拠点2 餌3

1 2 3

1

3

22 2 2

M = 4

Page 10: 立命合宿2016Day3:C問題

例題

餌4

拠点0 拠点1

拠点2 餌3

1 2 3

1

3

2

1

r4

5

拠点0と拠点2間の距離と 拠点1と拠点2間の距離は等しいので, 番号の小さい拠点0と拠点2を結ぶ.

M = 4

Page 11: 立命合宿2016Day3:C問題

例題

拠点4

拠点0 拠点1

拠点2 餌3

1 2 3

1

3

2

1

M = 4

Page 12: 立命合宿2016Day3:C問題

例題

拠点4

拠点0 拠点1

拠点2 拠点3

1 2 3

1

3

2

M = 4

Page 13: 立命合宿2016Day3:C問題

例題

拠点4

拠点0 拠点1

拠点2 拠点3

1 2 3

1

3

2

A.4 + √5

M = 4

Page 14: 立命合宿2016Day3:C問題

想定解法❖ 最初は拠点0と最も近い餌xを選択する.

❖ 拠点0と餌xを結ぶ線分を加える.

❖ 1つ線分を加えるごとにその線分とそれぞれの餌の距離を更新をする.

❖ 距離の更新は,加えた線分とそれぞれの餌の距離を計算し,今までの最短距離とその距離のminを取れば良い.

Page 15: 立命合宿2016Day3:C問題

想定解法❖ 距離の更新後に最短距離が最も小さい餌を選び,その

餌と最も近い拠点を線分で結ぶ.

❖ この処理をM回繰り返した後の加えた線分の長さの合計が答えになる.

❖ 1回の距離の更新には点と線分の距離計算をO(N)回行う.また,点と線分の計算はO(1)で可能である.

❖ この処理をM回繰り返すのでO(NM)で計算できる.

Page 16: 立命合宿2016Day3:C問題

実装のコツ❖ 今回のような,二次元平面上の距離を求めるような問

題ではベクトルで考えると実装しやすい.

1

2

3

A C

B

Page 17: 立命合宿2016Day3:C問題

点と線分の距離の求め方

1

2

3

ベクトルC - AとベクトルB - Aの内積が

負の場合

A C

B

❖ 点と線分の距離の求め方は内積と外積を使って解ける.

Page 18: 立命合宿2016Day3:C問題

点と線分の距離の求め方

1

2

3

A C

B

3と2を直接つなぐ

❖ 点と線分の距離の求め方は内積と外積を使って解ける.

Page 19: 立命合宿2016Day3:C問題

点と線分の距離の求め方

1

2

3

ベクトルA - CとベクトルB - Cの内積が

負の場合

A C

B

❖ 点と線分の距離の求め方は内積と外積を使って解ける.

Page 20: 立命合宿2016Day3:C問題

点と線分の距離の求め方

1

2

31と2を直接つなぐ

A C

B

❖ 点と線分の距離の求め方は内積と外積を使って解ける.

Page 21: 立命合宿2016Day3:C問題

点と線分の距離の求め方

1

2

3

A C

B

それ以外の場合は線分1,3と点2の距離は,

直線1,3と点2の距離と一致する直線と点の距離は外積を使って計算できる.

❖ 点と線分の距離の求め方は内積と外積を使って解ける.

Page 22: 立命合宿2016Day3:C問題

writer解❖ 井上:

❖ 栗田:

❖ 鈴木:

Page 23: 立命合宿2016Day3:C問題

提出状況❖ First Accept

online:onsite:

❖ 正答率: