Mobiles Alabama

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

요약
중첩된 모빌 구조를 해석하고 각 막대의 양쪽에 매달린 무게가 균형을 이루는 매듭 위치를 계산한다.
난이도

보통10점 중 5점

유형
트리, DFS, 구현, 수학
정답자
아직 제출이 없습니다

문제

Alabama Mobiles Inc.는 모빌(mobile)을 설계하고 제작한다. 모빌은 줄에 매달린 막대들로 이루어진 가벼운 “키네틱 조형물”이다. 각 막대의 양 끝에는 줄이 하나씩 달려 있고, 그 줄에는 작은 장식물이나 또 다른 (더 작은) 모빌이 매달린다. 잘 설계된 모빌은 모든 장식물의 무게가 균형을 이루어 각 막대가 자연스럽게 수평을 유지해야 한다.

막대는 양쪽에 매달린 무게가 서로 달라도 균형을 맞출 수 있다. 줄을 막대에 묶는 지점은 막대를 길이 L1L_1과 L2L_2의 두 부분으로 나누며, 다음을 만족해야 한다.

L1×W1=L2×W2L_1 \times W_1 = L_2 \times W_2

여기서 W1W_1은 막대의 L1L_1 쪽에 매달린 전체 무게이고, W2W_2는 반대쪽에 매달린 전체 무게이다.

부분적으로 주어진 모빌 설계를 읽어, 각 막대에서 줄을 묶어야 하는 지점을 구하는 프로그램을 작성하라.

각 모빌은 막대와 장식물의 모음으로 주어진다. 막대의 길이, 모든 장식물의 무게, 그리고 막대와 장식물이 서로 어떻게 연결되어 있는지가 주어진다. 막대와 연결 줄의 무게는 장식물의 무게에 비해 무시할 수 있을 만큼 가볍다고 가정한다. 모든 모빌은 적어도 하나의 막대를 포함한다.

입력

입력은 여러 개의 모빌 설계로 이루어진다. 각 모빌 설계는 괄호로 둘러싸인 식으로 주어지며, 다음 두 가지 기본 형태로 구성된다.

  1. ( D w ) — 장식물을 나타낸다. ww는 장식물의 무게를 나타내는 실수이다.
  2. ( B # L m1 m2 ) — 막대를 나타낸다.
    • #는 각 막대를 구분하는 고유한 정수 식별자이다. 식별자는 빽빽하게 부여되어, 막대가 총 kk개인 모빌은 1,…,k1, \dots, k의 번호를 사용한다. 하나의 식 안에서 이 식별자들이 나타나는 순서는 임의적이다.
    • LL은 막대의 길이를 나타내는 실수이다.
    • m1과 m2는 이 막대의 양 끝에 각각 매달린 부분을 나타내는 괄호 식이다.

위 두 형태에서 구성 요소 사이에 공백이 하나 표시된 곳에는, 실제 입력에서 하나 이상의 공백이나 줄바꿈이 올 수 있다. 예외로, (나 )의 양옆에는 0개 이상의 공백이나 줄바꿈이 올 수 있다.

모든 모빌은 적어도 하나의 막대를 포함한다. 입력의 끝은 ()만 있는 줄로 표시된다.

출력

각 모빌 설계에 대해, 막대의 식별 번호 순서대로 각 막대마다 한 줄씩 출력한다. 각 줄의 형식은 다음과 같다.

Bar N must be tied L from one end.

여기서 NN은 막대의 식별 번호이고, LL은 위에서 설명한 두 길이 L1L_1과 L2L_2 중 더 작은 값이며, 소수점 아래 한 자리까지 출력한다.

예제3

  1. 예제 1

    입력
    (B 2 4.0
      (D 1.0 )
      (B 1 2.0  (D 1.0 )  (D 2.0 )))
    ()
    
    예상 출력
    Bar 1 must be tied 0.7 from one end.
    Bar 2 must be tied 1.0 from one end.
    
  2. 예제 2

    입력
    (B 1 10.0 (D 5.0) (D 5.0))
    ()
    
    예상 출력
    Bar 1 must be tied 5.0 from one end.
    
  3. 예제 3

    입력
    (B 1 6.0 (D 1.0) (D 2.0))
    ()
    
    예상 출력
    Bar 1 must be tied 2.0 from one end.