테트리스 시뮬레이션

시간 제한5초메모리 제한512 MB

요약
주어진 종류와 회전과 열에 따라 테트리미노를 W by H 판에 떨어뜨려 가득 찬 줄을 지우고 최종 판이나 게임 오버를 출력합니다.
난이도

보통10점 중 4점

유형
시뮬레이션, 행렬, 구현
정답자
아직 제출이 없습니다

문제

테트리스를 간단하게 바꾼 게임을 시뮬레이션한다.

게임판은 너비가 WW, 높이가 HH이고 아래쪽으로 중력이 작용한다. 처음에 게임판은 비어 있다. 테트로미노는 게임판 위쪽에서 하나씩 떨어지고, 다른 테트로미노나 게임판 바닥에 닿는 순간 그 자리에 멈춘다. 떨어지는 동안 테트로미노는 회전하지 않고 좌우로도 움직이지 않는다.

한 줄이 테트로미노로 가득 차면 그 줄은 곧바로 사라진다. 한 번에 여러 줄이 사라지기도 한다. 예를 들면 다음과 같다.

  |..............|      |..............|      |..............|
  |.............o|      |..............|      |..............|
  |.............o|      |..............|      |..............|
  |.............o|      |..............|      |..............|
  |.............o|      |..............|      |..............|
  |..xx..........| -->  |..xx..........| -->  |..............|
  |xxxxxxxxxxxxx.|      |xxxxxxxxxxxxxo|      |..............|
  |xxxxxxxxxxxxx.|      |xxxxxxxxxxxxxo|      |..xx..........|
  |xx..xxxxxxxxx.|      |xx..xxxxxxxxxo|      |xx..xxxxxxxxxo|
  |xxxxxxxxxxx...|      |xxxxxxxxxxx..o|      |xxxxxxxxxxx..o|
  ----------------      ----------------      ----------------

  Falling               Stopped               Cleared 2 lines

이 게임에서는 줄이 사라진 뒤에 공중에 뜬 칸이 더 내려오지 않는다. 그래서 위쪽의 두 칸이 그대로 남는다. 원래 테트리스와 달리 연쇄 삭제도 일어나지 않는다.

주어진 테트로미노를 모두 놓으면 게임이 끝난다. 게임판 높이가 모자라서 이번 차례의 테트로미노를 놓지 못해도 게임이 끝난다.

각 테트로미노의 종류, 회전, 떨어지는 가로 위치는 입력으로 주어진다. 테트로미노는 모두 게임판 위쪽에서 떨어지기 시작한다. 각 게임의 최종 상태를 구하라.

입력

테트로미노는 7가지다.

1   2   3   4   5   6   7

x    x  x    x  xx  x    x
xx  xx  x    x  xx  x   xxx
 x  x   xx  xx      x
                    x

테트로미노의 회전은 수 rr로 나타내고, rr는 0, 1, 2, 3 중 하나다. 회전 방향은 반시계 방향이다. 예를 들면 다음과 같다.

r=0   r=1  r=2   r=3

  x     x   xxx   x
 xxx   xx    x    xx
        x         x

 x     xx   x     xx
 xx   xx    xx   xx
  x          x

떨어지는 가로 위치는 수 xx로 나타낸다. xx는 테트로미노를 감싸는 가장 작은 직사각형의 왼쪽 아래 칸의 좌표이고, 0부터 시작한다.

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 정수 WW, HH, NN이 주어진다. WW는 게임판의 너비, HH는 게임판의 높이, NN은 떨어지는 블록의 개수다.

이어지는 NN개 줄에는 정수 tit_i, rir_i, xix_i가 주어진다. tit_i는 테트로미노의 종류, rir_i는 이 테트로미노의 회전, xix_i는 이 테트로미노가 떨어지는 가로 위치다. xix_i는 테트로미노가 가로 방향으로 게임판 안에 들어가도록 주어진다.

출력

각 테스트 케이스마다 먼저 Case #i:를 한 줄에 출력한다. ii는 테스트 케이스 번호이고 1부터 시작한다.

그 다음, NN개를 모두 놓기 전에 게임이 끝났으면 따옴표 없이 Game Over!를 출력한다. 그렇지 않으면 게임판의 최종 상태를 HH개 줄에 출력한다. 각 줄은 WW개의 문자로 이루어지고, 각 문자는 . 또는 x다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤ti≤71 \le t_i \le 7
  • 0≤ri<40 \le r_i < 4
  • 4≤W≤1004 \le W \le 100
  • 1≤H≤1001 \le H \le 100
  • 0≤N≤50000 \le N \le 5000

예제2

  1. 예제 1

    입력
    5
    8 6 1
    1 0 0
    5 4 1
    1 1 1
    5 6 3
    5 0 0
    5 0 2
    3 2 3
    6 4 3
    6 2 0
    6 2 0
    6 2 0
    6 4 2
    6 0 0
    6 0 1
    
    예상 출력
    Case #1:
    ........
    ........
    ........
    x.......
    xx......
    .x......
    Case #2:
    .....
    .....
    ..xx.
    .xx..
    Case #3:
    .....
    .....
    .....
    .....
    .....
    ...xx
    Case #4:
    Game Over!
    Case #5:
    xx....
    xx....
    xx....
    xx....
    
  2. 예제 2

    입력
    7
    8 5 1
    1 0 3
    8 5 1
    2 0 3
    8 5 1
    3 0 3
    8 5 1
    4 0 3
    8 5 1
    5 0 3
    8 5 1
    6 0 3
    8 5 1
    7 0 3
    
    예상 출력
    Case #1:
    ........
    ........
    ...x....
    ...xx...
    ....x...
    Case #2:
    ........
    ........
    ....x...
    ...xx...
    ...x....
    Case #3:
    ........
    ........
    ...x....
    ...x....
    ...xx...
    Case #4:
    ........
    ........
    ....x...
    ....x...
    ...xx...
    Case #5:
    ........
    ........
    ........
    ...xx...
    ...xx...
    Case #6:
    ........
    ...x....
    ...x....
    ...x....
    ...x....
    Case #7:
    ........
    ........
    ........
    ....x...
    ...xxx..