만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

관할 구역 제한

시간 제한30초메모리 제한1024 MB

요약
격자 도시에 있는 경찰서마다 순찰 가능한 정사각형 범위가 주어질 때, 각 칸을 순찰할 수 있는 경찰서에 하나씩 배정해 배정된 칸 수의 최댓값과 최솟값 차이를 최소로 만드는 값을 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 그래프, 이분 탐색
정답자
아직 제출이 없습니다

문제

그리드토피아 시는 RR행 CC열의 정사각형 칸("블록")으로 이루어진 격자이다. 행은 위에서 아래로 1번부터 RR번까지, 열은 왼쪽에서 오른쪽으로 1번부터 CC번까지 번호가 붙는다. 이 도시에는 SS개의 경찰서가 있다. ii번째 경찰서는 RiR_i행 CiC_i열의 블록에 있다. 한 블록에 경찰서가 둘 이상 있는 경우는 없다.

각 경찰서는 가로나 세로로 DiD_i블록 이내에 있는 블록만 순찰할 수 있다. ii번째 경찰서는 max⁡(∣R′−Ri∣,∣C′−Ci∣)≤Di\max(|R' - R_i|, |C' - C_i|) \le D_i이면 R′R'행 C′C'열의 블록을 순찰할 수 있다. 달리 말해, ii번째 경찰서는 자신을 중심으로 한 한 변의 길이가 2Di+12D_i + 1인 정사각형 안의 블록만 순찰할 수 있다.

당신은 새로 부임한 경찰청장이다. 순찰할 수 있는 경찰서 중 정확히 하나에 일부 블록을 배정해야 한다. 경찰서가 있는 블록과 어떤 경찰서도 순찰할 수 없는 블록은 배정하지 않는다. 나머지 모든 블록은 반드시 배정해야 한다. AiA_i를 ii번째 경찰서에 배정된 블록 수라고 하자. 모든 AiA_i 값의 최댓값과 최솟값의 차이를 최소화해 업무량을 최대한 고르게 나눠야 한다. 가능한 가장 작은 차이는 얼마인가?

입력

첫 줄에 테스트 케이스 수 TT가 주어진다. 각 테스트 케이스는 RR, CC, SS가 주어지는 줄로 시작한다. 이어서 SS개의 줄에 RiR_i, CiC_i, DiD_i가 주어진다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄을 출력한다. xx는 테스트 케이스 번호(1부터 시작)이고, yy는 위에서 구한 차이다.

제한

  • 1≤T≤1001 \le T \le 100.
  • 2≤S≤152 \le S \le 15.
  • 모든 ii에 대해 1≤Ri≤R1 \le R_i \le R.
  • 모든 ii에 대해 1≤Ci≤C1 \le C_i \le C.
  • 모든 i≠ji \ne j에 대해 Ri≠RjR_i \ne R_j 또는 Ci≠CjC_i \ne C_j. (같은 블록에 경찰서가 둘 놓이지 않는다.)
  • 모든 ii에 대해 1≤Di<max⁡(R,C)1 \le D_i < \max(R, C).

힌트

예제 1에서 도시는 3행 4열의 격자이며, 경찰서 하나는 왼쪽 위 블록에, 다른 하나는 오른쪽 아래 블록의 바로 왼쪽 블록에 있다. 1번 경찰서는 자신의 블록 가장자리나 모서리에 닿은 3개 블록만 순찰할 수 있다. 나머지 블록들은 가로나 세로로 1블록보다 멀리 떨어져 있다. 2번 경찰서는 경찰서가 있는 블록을 제외한 격자의 모든 블록을 순찰할 수 있다. 1번 경찰서에 순찰 가능한 3개 블록을 모두 배정하고, 나머지 7개 블록을 2번 경찰서에 배정하면 배정 블록 수의 차이가 최소가 된다.

예제 2에서 최적의 배정 방법 중 하나는 아래와 같다. 1은 1번 경찰서, 2는 2번 경찰서, !는 1번 경찰서에 배정된 블록, @는 2번 경찰서에 배정된 블록, .는 어느 경찰서에도 배정되지 않는 블록을 나타낸다. 한 경찰서에 배정된 블록이 하나의 연속된 영역을 이룰 필요는 없다.

@@@@.
!!!@.
!2!@.
1!!@.
!@!@.

예제1

  1. 예제 1

    입력
    2
    3 4 2
    1 1 1
    3 3 2
    5 5 2
    4 1 2
    3 2 2
    
    예상 출력
    Case #1: 4
    Case #2: 0