아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

바둑

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

요약
여러 테스트 케이스의 바둑판에서 빈 영역을 flood fill로 나누고, 각 영역에 인접한 돌의 색으로 흑 또는 백의 집을 판정해 점수를 세고 승자를 출력한다.
난이도

보통10점 중 5점

유형
그래프, BFS, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

바둑에서 두 명의 플레이어는 n×nn \times n 격자의 격자점 위에 검은 돌과 흰 돌을 번갈아 놓으며, 각자 가능한 한 넓은 집(즉, 비어 있는 격자점들의 영역)을 둘러싸려고 합니다. 게임이 끝나면 각 플레이어의 점수는 자신의 돌로 둘러싼 집의 전체 넓이가 됩니다. 대국이 끝난 시점의 검은 돌과 흰 돌의 위치가 주어질 때, 각 플레이어의 점수를 계산하여 승자를 판정하세요.

형식적으로, 두 격자점 (r,c)(r, c)와 (r′,c′)(r', c')는 ∣r−r′∣+∣c−c′∣=1|r - r'| + |c - c'| = 1일 때 인접합니다. 비어 있는 격자점들로 이루어진 연결된 영역은, 그 영역에 인접한 돌이 놓인 모든 격자점이 한 플레이어의 돌만 담고 있을 때 그 플레이어의 집이 됩니다(그림 1 참고). 플레이어의 점수는 자신의 집에 속한 빈 격자점의 개수입니다.

그림 1: 9×99 \times 9 바둑판. 검은색 집에 속한 빈 격자점은 B, 흰색 집에 속한 빈 격자점은 W로 표시했습니다. 어느 쪽에도 속하지 않는 중립 격자점은 표시하지 않았습니다. 위 그림에서는 흰색이 21−3=1821 - 3 = 18점 차로 이깁니다.

참고: 여기서 정의한 점수 계산은 실제 바둑과 정확히 일치하지는 않습니다. 모든 분쟁이 이미 정리되어, 각 집이 한 가지 색의 돌로만 둘러싸여 있다고 가정합니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 세 줄로 구성됩니다.

  • 첫째 줄에는 세 정수 nn (1≤n≤191 \le n \le 19), bb, ww (b≥0b \ge 0, w≥0w \ge 0, 1≤b+w≤n21 \le b + w \le n^2)가 주어집니다. 각각 바둑판의 크기, 검은 돌의 개수, 흰 돌의 개수입니다.
  • 둘째 줄에는 검은 돌의 위치를 나타내는 bb개의 정수 쌍 r1 c1 … rb cbr_1\ c_1\ \dots\ r_b\ c_b (1≤ri,ci≤n1 \le r_i, c_i \le n)가 주어집니다.
  • 셋째 줄에는 흰 돌의 위치를 나타내는 ww개의 정수 쌍 r1′ c1′ … rw′ cw′r'_1\ c'_1\ \dots\ r'_w\ c'_w (1≤ri′,ci′≤n1 \le r'_i, c'_i \le n)가 주어집니다.

같은 격자점에 두 개 이상의 돌이 놓이는 경우는 없습니다. b=0b = 0 또는 w=0w = 0이면 해당 줄은 비어 있습니다. 입력은 00 하나만 있는 줄로 끝나며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 한 줄을 출력합니다. 두 점수의 차이(양수)를 XX라고 할 때, 흰색이 이기면 White wins by X, 검은색이 이기면 Black wins by X를 출력하고, 두 점수가 같으면 Draw를 출력합니다.

예제1

  1. 예제 1

    입력
    1 1 0
    1 1
    
    2 0 1
    
    1 1
    5 12 4
    1 1 1 2 1 3 2 1 2 3 3 1 3 3 4 1 4 3 5 1 5 2 5 3
    1 4 2 4 3 4 3 5
    
    0
    
    예상 출력
    Draw
    White wins by 3
    Black wins by 1