끈 팽팽하게 당기기

시간 제한1초메모리 제한128 MB

요약
두 구멍 사이의 다각형 끈과 여러 핀이 주어질 때, 팽팽하게 당겼을 때 핀에 걸려 형성되는 최종 끈의 길이를 구한다.
난이도

어려움10점 중 8점

유형
기하, 그리디, 정렬, 구현
정답자
아직 제출이 없습니다

문제

평평한 판의 앞면에 구멍 두 개가 뚫려 있고 핀 여러 개가 박혀 있습니다. 판 뒤쪽에서 나온 실이 한 구멍을 통해 앞면으로 올라와 꺾은선(다각형 사슬) 모양으로 놓인 뒤, 다른 구멍을 통해 다시 판 뒤쪽으로 내려갑니다. 처음에 실은 어떤 핀에도 닿아 있지 않습니다.

실의 양 끝에 무게가 같은 돌을 하나씩 매답니다. 돌이 실을 서서히 잡아당겨 느슨한 부분이 없어질 때까지 팽팽하게 만듭니다. 이때 실은 일부 핀에 걸려 새로운 꺾은선 모양으로 자리 잡습니다(어떤 핀에도 걸리지 않는 경우도 있습니다). 실은 팽팽해지는 동안 스스로 얽히지 않으므로, 최종 모양은 내부 꼭짓점이 핀의 위치이고 양 끝점이 두 구멍인 꺾은선이 됩니다.

실과 핀과 구멍은 충분히 가늘어서 그 두께는 무시할 수 있습니다. 판 앞면에 놓인, 팽팽해진 실의 길이를 구하는 프로그램을 작성하세요.

입력

입력은 여러 개의 데이터셋으로 이루어지며, 공백으로 구분된 두 개의 0이 적힌 줄로 끝납니다.

각 데이터셋의 형식은 다음과 같으며, 여기서 l=m+nl = m + n 입니다.

m n
x1 y1
...
xl yl

첫 줄에는 정수 mm 과 nn 이 주어집니다 (2≤m≤1002 \le m \le 100, 0≤n≤1000 \le n \le 100). mm 은 처음 실 모양을 나타내는 꼭짓점의 개수(두 구멍 포함)이고, nn 은 핀의 개수입니다. 이어지는 l=m+nl = m + n 개의 줄에는 각각 정수 xix_i 와 yiy_i 가 주어지며(0≤xi≤10000 \le x_i \le 1000, 0≤yi≤10000 \le y_i \le 1000), 이는 점 Pi=(xi,yi)P_i = (x_i, y_i) 의 좌표입니다.

  • P1,…,PmP_1, \dots, P_m 은 처음 실을 나타냅니다. 두 구멍은 P1P_1 과 PmP_m 이고, 실은 이 순서대로 이어진 꺾은선 P1→P2→⋯→PmP_1 \to P_2 \to \dots \to P_m 입니다.
  • Pm+1,…,Pm+nP_{m+1}, \dots, P_{m+n} 은 핀의 위치입니다.

같은 위치에 놓인 두 점은 없으며, 한 직선 위에 놓인 세 점도 없습니다.

출력

각 데이터셋마다, 판 앞면에 남은 팽팽해진 실의 길이를 소수점 아래 정확히 세 자리로 반올림하여 한 줄에 출력하세요. 그 밖의 문자는 출력하지 마세요.

예제3

  1. 예제 1

    입력
    6 16
    5 4
    11 988
    474 975
    459 16
    985 12
    984 982
    242 227
    140 266
    45 410
    92 570
    237 644
    370 567
    406 424
    336 290
    756 220
    634 251
    511 404
    575 554
    726 643
    868 571
    907 403
    845 283
    10 4
    261 196
    943 289
    859 925
    56 822
    112 383
    514 0
    1000 457
    514 1000
    0 485
    233 224
    710 242
    850 654
    485 915
    140 663
    26 5
    0 953
    180 0
    299 501
    37 301
    325 124
    162 507
    84 140
    913 409
    635 157
    645 555
    894 229
    598 223
    783 514
    765 137
    599 445
    695 126
    859 462
    599 312
    838 167
    708 563
    565 258
    945 283
    251 454
    125 111
    28 469
    1000 1000
    185 319
    717 296
    9 315
    372 249
    203 528
    15 15
    200 247
    859 597
    340 134
    967 247
    421 623
    1000 427
    751 1000
    102 737
    448 0
    978 510
    556 907
    0 582
    627 201
    697 963
    616 608
    345 819
    810 809
    437 706
    702 695
    448 474
    605 474
    329 355
    691 350
    816 231
    313 216
    864 360
    772 278
    756 747
    529 639
    513 525
    0 0
    
    예상 출력
    2257.052
    3609.922
    2195.837
    3619.772
    
  2. 예제 2

    입력
    2 0
    0 0
    300 400
    0 0
    
    예상 출력
    500.000
    
  3. 예제 3

    입력
    3 1
    0 0
    50 100
    100 0
    50 10
    0 0
    
    예상 출력
    101.980