더블 녹아웃 토너먼트

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

요약
더블 녹아웃 토너먼트를 라운드마다 시뮬레이션하며 무패, 1패, 탈락 팀 수를 각 라운드가 끝난 뒤 출력한다.
난이도

보통10점 중 4점

유형
시뮬레이션, 수학, 구현, 재귀
정답자
아직 제출이 없습니다

문제

여러 스포츠에서 우승 팀은 더블 녹아웃(double knockout) 방식으로 가려진다. 각 팀은 두 번째 패배를 당해야 비로소 탈락하므로, 최종 우승 팀은 패배가 한 번 이하인 채로 마지막까지 남는 팀이다.

대회는 여러 라운드로 진행된다. 매 라운드마다 아직 탈락하지 않은 팀들을 둘씩 짝지어 경기를 치르는데, 한 가지 규칙이 있다. 무패 팀은 이미 1패를 기록한 팀과 절대 맞붙지 않는다. 이 규칙을 지키면서 매 라운드마다 최대한 많은 팀을 짝짓는다(무패 팀끼리, 1패 팀끼리 경기한다). 모든 경기에는 승자와 패자가 있으며, 패자는 패배 수가 1 늘어나고 2패가 된 팀은 탈락한다.

라운드가 충분히 진행되면 두 팀만 남는다. 이때 한 팀은 무패이고 다른 한 팀은 1패이므로 위 규칙을 더 이상 지킬 수 없어, 두 팀이 서로 맞붙어야 한다. 이 승부는 항상 필요하다고 가정한다. 즉 무패 팀이 이 경기에서 패해 두 팀 모두 1패가 되고, 그런 다음 마지막 라운드를 치러 우승 팀을 가린다.

더블 녹아웃 토너먼트가 라운드별로 어떻게 전개되는지 보고하는 프로그램을 작성하라.

입력

첫째 줄에 테스트 케이스의 수를 나타내는 양의 정수 nn이 주어진다. 이어지는 nn개의 줄에는 각각 해당 대회에 참가하는 팀의 수를 나타내는 양의 정수 tt (t<32768t < 32768)가 하나씩 주어진다.

출력

각 테스트 케이스마다 먼저 초기 상태를 다음 형식의 줄로 출력한다.

Round 0: 2 undefeated, 0 one-loss, 0 eliminated

그다음, 치러진 각 라운드에 대해 같은 형식으로 한 줄씩 출력한다. 각 줄은 해당 라운드가 끝난 뒤의 상태, 즉 무패 팀 수, 1패 팀 수, 탈락한 팀 수를 나타낸다. 마지막으로 There are R rounds 형식의 줄을 출력하며, 여기서 RR은 치러진 라운드의 수이다. 연속한 테스트 케이스의 출력은 빈 줄 하나로 구분한다.

힌트

추가로 생각해 볼 문제:

b) 어떤 음이 아닌 정수 kk에 대해 팀이 t=22kt = 2^{2^{k}}개 있다면, 몇 라운드가 치러지는가?

c) 팀이 tt개인 대회에서는 총 몇 경기가 치러지는가?

예제1

  1. 예제 1

    입력
    1
    2
    
    예상 출력
    Round 0: 2 undefeated, 0 one-loss, 0 eliminated
    Round 1: 1 undefeated, 1 one-loss, 0 eliminated
    Round 2: 0 undefeated, 2 one-loss, 0 eliminated
    Round 3: 0 undefeated, 1 one-loss, 1 eliminated
    There are 3 rounds