삼각형의 나머지 요소 구하기

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

요약
삼각형의 일부 변과 각이 주어질 때 삼각법 공식으로 나머지 값을 계산하고, 해가 유일한지, 유한히 많은지, 불가능한지 판정한다.
난이도

보통10점 중 7점

유형
기하, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

평면 기하에서 삼각형은 세 변과 그 사이의 세 각으로 이루어진다. 세 변의 길이를 aa, bb, cc라 하고, 각 변과 마주 보는 각을 차례로 α\alpha, β\beta, γ\gamma라고 하자. 즉 α\alpha는 변 aa의 대각, β\beta는 변 bb의 대각, γ\gamma는 변 cc의 대각이다.

기하 교재에는 삼각형에 관한 공식이 여럿 실려 있다.

α+β+γ=πasin⁡α=bsin⁡β=csin⁡γa=bcos⁡γ+ccos⁡βa2=b2+c2−2bccos⁡αa−ba+b=tan⁡α−β2tan⁡α+β2\begin{aligned} \alpha + \beta + \gamma &= \pi \\ \frac{a}{\sin \alpha} = \frac{b}{\sin \beta} &= \frac{c}{\sin \gamma} \\ a &= b \cos \gamma + c \cos \beta \\ a^2 &= b^2 + c^2 - 2bc \cos \alpha \\ \frac{a - b}{a + b} &= \frac{\tan \frac{\alpha - \beta}{2}}{\tan \frac{\alpha + \beta}{2}} \end{aligned}

aa, α\alpha, bb, β\beta, cc, γ\gamma 여섯 값은 삼각형 하나를 완전히 결정한다. 이 중 충분히 많은 값이 주어지면 나머지는 위 공식으로 계산한다.

여섯 값 중 일부가 주어졌을 때 나머지를 계산하는 프로그램을 작성하라. 주어진 값이 너무 적어서 삼각형이 하나로 정해지지 않는 입력도 있고, 아예 삼각형이 만들어지지 않는 입력도 있다. 올바른 삼각형은 세 변이 모두 0보다 크고, 세 각이 모두 0보다 크며 π\pi보다 작다. 이런 경우에는 Invalid input.을 출력한다. 삼각형을 정하는 데 필요한 최소한의 값보다 많이 주어졌는데 값끼리 어긋날 때도, 예를 들어 세 각이 모두 주어졌으나 그 합이 π\pi보다 클 때도 같은 문장을 출력한다. 최소한보다 많은 값이 주어진 경우, 계산으로 얻은 값 xx와 입력으로 주어진 값 yy는 ∣x−y∣≤10−6max⁡(1,∣x∣,∣y∣)|x - y| \le 10^{-6} \max(1, |x|, |y|)이면 서로 맞는 값으로 본다.

조건을 만족하는 삼각형이 둘 이상이면서 유한개인 입력도 있다. 이때는 More than one solution.을 출력한다.

그 밖의 경우에는 빠진 값을 계산해 여섯 값을 모두 출력한다.

입력

첫 줄에 파라미터 집합의 개수가 주어진다. 이어지는 각 줄에는 공백 하나로 구분된 여섯 개의 수가 주어지며, 순서대로 aa, α\alpha, bb, β\beta, cc, γ\gamma의 값이다. 각의 단위는 라디안이다. 값이 -1이면 그 파라미터는 주어지지 않았다는 뜻이고, 계산해야 한다. 모든 실수는 유효숫자 여덟 자리 이상으로 주어진다.

출력

파라미터 집합마다 한 줄씩 출력한다. 올바른 삼각형이 하나로 정해지면 aa, α\alpha, bb, β\beta, cc, γ\gamma를 이 순서로 공백 하나씩 두고 출력한다. 각 값은 소수점 아래 일곱째 자리에서 반올림해, 자리가 비면 0을 채워 항상 소수점 아래 여섯 자리로 출력한다.

조건을 만족하는 삼각형이 둘 이상이면서 유한개면 More than one solution.을, 삼각형이 하나로 정해지지 않거나 올바른 삼각형이 없으면 Invalid input.을 출력한다.

테스트 데이터에는 반올림 결과가 갈릴 만큼 여섯째 자리 경계에 가까운 값이 나오지 않는다.

예제2

  1. 예제 1

    입력
    3
    62.72048064 2.26853639 -1.00000000 0.56794657 -1.00000000 -1.00000000
    15.69326944 0.24714213 -1.00000000 1.80433105 66.04067877 -1.00000000
    72.83685175 1.04409241 -1.00000000 -1.00000000 -1.00000000 -1.00000000
    
    예상 출력
    62.720481 2.268536 44.026687 0.567947 24.587224 0.305110
    Invalid input.
    Invalid input.
    
  2. 예제 2

    입력
    5
    3.00000000 -1.00000000 4.00000000 -1.00000000 5.00000000 -1.00000000
    5.00000000 -1.00000000 7.00000000 -1.00000000 -1.00000000 1.00000000
    5.00000000 0.50000000 8.00000000 -1.00000000 -1.00000000 -1.00000000
    3.00000000 1.20000000 8.00000000 -1.00000000 -1.00000000 -1.00000000
    3.00000000 0.64350111 4.00000000 0.92729522 5.00000000 1.57079633
    
    예상 출력
    3.000000 0.643501 4.000000 0.927295 5.000000 1.570796
    5.000000 0.774684 7.000000 1.366908 6.014885 1.000000
    More than one solution.
    Invalid input.
    3.000000 0.643501 4.000000 0.927295 5.000000 1.570796