QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100

#406. 샌드위치

Statistics

JOI 는 IOI 교류회에 참가하고 있다. 교류회에서는 $R$ 행 $C$ 열의 격자 모양으로 샌드위치가 배치되어 있다. 각 샌드위치는 빗변이 아닌 두 변의 길이가 격자 칸의 한 변의 길이와 같은 직각이등변삼각형 모양이며, 각 칸에는 두 개의 샌드위치가 서로 빗변이 맞닿도록 놓여 있다. 아래 그림은 샌드위치 배치의 한 예를 보여준다.

problem_406_3458388a51fae6a8179754f56fc767fa.png

그림 1. 샌드위치 배치의 예

어떤 샌드위치가 다음 두 조건을 모두 만족하면 그 샌드위치는 가져갈 수 없다: 빗변이 아직 가져가지 않은 다른 샌드위치와 맞닿아 있다. 빗변이 아닌 두 변 중 적어도 하나가 아직 가져가지 않은 다른 샌드위치와 맞닿아 있다.

이외의 샌드위치는 가져갈 수 있다.

아무 샌드위치도 가져가지 않은 상태를 초기 상태라고 한다. 초기 상태에서 특정 샌드위치를 가져가기 위해서는 먼저 다른 샌드위치들을 가져가야 할 수도 있다. 샌드위치의 배치에 따라서는 아예 가져갈 수 없는 샌드위치가 있을 수도 있다.

JOI 는 같은 칸에 놓인 두 개의 샌드위치를 모두 먹고 싶다. 그는 아직 어느 칸의 샌드위치를 먹을지 결정하지 않았다.

그는 초기 상태에서 특정 칸에 있는 두 샌드위치를 모두 얻기 위해 가져가야 하는 샌드위치의 최소 개수에 관심이 있다.

과제

샌드위치의 배치가 주어질 때, 각 칸에 대하여 초기 상태에서 몇 개의 샌드위치를 가져감으로써 그 칸에 있는 두 샌드위치를 모두 가져갈 수 있는지 판별하라. 만약 가능하다면, 가져가야 하는 샌드위치의 최소 개수를 구하라. 단, 샌드위치의 개수에는 목표로 하는 두 샌드위치 자체도 포함해야 한다.

입력

표준 입력으로부터 다음 데이터를 읽어들인다: 첫째 줄에는 공백으로 구분된 두 정수 $R$ 과 $C$ 가 주어진다. 이는 샌드위치가 $R$ 행 $C$ 열의 격자 모양으로 배치되어 있음을 나타낸다. 이어지는 $R$ 개의 줄 중 $i$ 번째 줄($1 \le i \le R$)에는 길이가 $C$ 인 문자열이 주어진다. 각 문자는 'N' 또는 'Z' 이다. 이 문자열의 $j$ 번째 문자($1 \le j \le C$)는 위에서부터 $i$ 번째 행, 왼쪽에서부터 $j$ 번째 열에 있는 칸의 샌드위치 배치를 나타낸다. 'N' 과 'Z' 는 각각 다음 배치를 나타낸다.

problem_406_6215a61d400ae88cfe74a0a9599ce3dd.png

그림 2. 각 칸의 샌드위치 배치

출력

표준 출력에 $R$ 개의 줄을 출력하라. $i$ 번째 줄($1 \le i \le R$)에는 공백으로 구분된 $C$ 개의 정수를 출력해야 한다. $j$ 번째 정수($1 \le j \le C$)는 위에서부터 $i$ 번째 행, 왼쪽에서부터 $j$ 번째 열에 있는 칸의 두 샌드위치를 모두 얻기 위해 가져가야 하는 샌드위치의 최소 개수여야 한다. 만약 가져가는 것이 불가능하다면 -1 을 출력하라.

제한

모든 입력 데이터는 다음 조건을 만족한다: $1 \le R \le 400$ $1 \le C \le 400$

서브태스크

서브태스크 1 [35점]

  • $R \le 50$
  • $C \le 50$

서브태스크 2 [65점]

  • 추가적인 제한 조건이 없다.

예제

입력 1

2 3
NZN
ZZN

출력 1

10 8 2
8 6 4

노트 1

예제 1 의 샌드위치 배치는 문제 설명의 그림 1 에 해당한다. 예를 들어, 위에서부터 2 번째 행, 왼쪽에서부터 2 번째 열에 있는 칸의 두 샌드위치를 가져가기 위해서는 다음 순서대로 샌드위치를 가져가면 된다: 1 번째 행, 3 번째 열 칸의 오른쪽 위 샌드위치를 가져간다. 1 번째 행, 3 번째 열 칸의 왼쪽 아래 샌드위치를 가져간다. 2 번째 행, 3 번째 열 칸의 오른쪽 위 샌드위치를 가져간다. 2 번째 행, 3 번째 열 칸의 왼쪽 아래 샌드위치를 가져간다. 2 번째 행, 2 번째 열 칸의 오른쪽 아래 샌드위치를 가져간다. 2 번째 행, 2 번째 열 칸의 왼쪽 위 샌드위치를 가져간다.

총 6 개의 샌드위치를 가져가게 되며, 이것이 최소이므로 6 이 출력된다.

입력 2

2 2
NZ
ZN

출력 2

-1 -1
-1 -1

노트 2

이 경우, 어떤 샌드위치도 가져갈 수 없다.

입력 3

5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN

출력 3

10 12 14 16 2
8 -1 -1 -1 4
6 -1 -1 -1 6
4 -1 -1 -1 8
2 16 14 12 10

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.