삼각형 자르기

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

요약
큰 삼각형과 네 개의 작은 삼각형이 시계 방향 꼭짓점 각도로 주어질 때, 세 번의 직선 절단으로 정확히 그 네 조각을 만들 수 있는지 판정한다.
난이도

어려움10점 중 9점

유형
기하, 시뮬레이션, 백트래킹, 구현
정답자
아직 제출이 없습니다

문제

어느 전산학 교수가 어린 딸이 가위로 커다란 삼각형 종이를 자르는 모습을 지켜보고 있었다. 종이는 한 면이 초록색, 다른 면이 흰색인데, 딸은 항상 흰색 면을 위로 두어 초록색 면은 절대 보이지 않는다. 딸은 늘 같은 방식으로 자른다. 커다란 흰색 삼각형 하나에서 시작해 정확히 세 번의 직선 자르기를 하며, 각 자르기는 한 조각을 두 조각으로 나눈다. 다 자르고 나면 정확히 네 개의 더 작은 흰색 삼각형이 남는다. 그러면 그 네 조각을 옆에 치워 두고 새 삼각형으로 다시 시작한다.

네 삼각형이 만들어지는 배치는 여러 가지가 가능하다(모든 각도는 degree 단위이다).

  • 그중 정확히 두 가지 배치에서는, 원래 큰 삼각형의 한 꼭짓점에서 맞은편 변까지 완전히 가로지르는 자르기가 하나도 없다. 이 두 배치는 (그것들의 회전을 포함하여) 그러한 자르기 없이 네 삼각형을 얻는 유일한 방법이다. 첫 번째는 세 꼭짓점에서 각각 작은 삼각형을 하나씩 잘라내고 가운데에 네 번째 삼각형이 남는 배치이다. 두 번째는 한 꼭짓점을 통째로 잘라낸 뒤, 남은 조각을 첫 번째 자른 선 위의 한 내부 점에서 모두 만나는 세 삼각형으로 나누는 배치이다.
  • 그 밖의 모든 올바른 배치는, 한 꼭짓점에서 맞은편 변까지 가로지르는 자르기를 적어도 하나 사용한다.
  • 어떤 배치는 결코 나올 수 없다. 각 자르기는 반드시 기존 조각 하나를 정확히 두 조각으로 나누어야 하기 때문이다.

종이를 절대 뒤집지 않으므로, 각 삼각형은 회전은 할 수 있어도 좌우 반전(거울상)은 할 수 없다.

교수는 딸의 작품을 알아볼 수 있을지 궁금해졌다. 작은 삼각형 네 개의 정확한 모양이 주어질 때, 이들이 하나의 큰 삼각형에서 위 방식으로 만들어질 수 있을까? 교수는 삼각형의 모양만이 중요하다는 점을 깨달았다. 모양이 서로 맞기만 하면 알맞은 크기는 언제나 정할 수 있기 때문이다. 큰 삼각형 하나와 작은 삼각형 네 개의 각도가 주어질 때, 위 방식으로 큰 삼각형에서 네 작은 삼각형을 만들어 낼 수 있는지 판정하라.

입력

입력은 1개 이상 30개 이하의 데이터셋으로 이루어지며, 마지막에는 0 0 180만 적힌 줄이 와서 입력의 끝을 나타낸다.

각 데이터셋은 공백 하나로 구분된 15개의 양의 정수로 이루어진 한 줄이며, 각 정수는 180보다 작다. 15개의 정수는 세 개씩 다섯 묶음을 이루고, 각 묶음은 한 삼각형의 세 꼭짓점 각도(degree)를 나타낸다. 첫 묶음은 큰 삼각형을, 나머지 네 묶음은 네 개의 작은 삼각형을 나타낸다.

어떤 삼각형도 뒤집히지 않았으며(초록색 면이 위), 각 삼각형에서 세 꼭짓점 각도는 시계 방향 순서로 나열되어 있다.

출력

각 데이터셋마다 한 줄을 출력한다. 딸의 방식으로 큰 삼각형에서 시작해 주어진 네 작은 삼각형과 일치하는 네 삼각형을 만들 수 있으면 yes를, 그렇지 않으면 no를 출력한다.

예제4

  1. 예제 1

    입력
    60 70 50 30 100 50 75 70 35 75 60 45 45 65 70
    40 75 65 60 40 80 20 120 40 45 85 50 25 55 100
    60 60 60 30 60 90 30 60 90 90 60 30 90 60 30
    30 60 90 30 120 30 30 120 30 30 120 30 30 120 30
    60 70 50 30 100 50 75 70 35 75 60 45 70 65 45
    0 0 180
    
    예상 출력
    yes
    yes
    yes
    no
    no
    
  2. 예제 2

    입력
    60 60 60 60 60 60 60 60 60 60 60 60 60 60 60
    0 0 180
    
    예상 출력
    yes
    
  3. 예제 3

    입력
    40 75 65 60 40 80 20 120 40 45 85 50 25 55 100
    0 0 180
    
    예상 출력
    yes
    
  4. 예제 4

    입력
    60 70 50 30 100 50 75 70 35 75 60 45 70 65 45
    0 0 180
    
    예상 출력
    no