题号:NC53238
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
JOI君去参加了IOI联♂谊会,会场有一张桌子,桌上有

个三明治被摆放成R行C列。每个三明治都被沿主对角线或者次对角线分割成两个小三明治。
一个小三明治仅当以下两种情况都满足时才不能被吃掉:
与该小三明治在同一个三明治中的另一个三明治还没被吃掉;与该小三明治两条直角边相邻的另外两个小三明治中有一个没有被吃掉。现在JOI君想问你,他吃掉每一个三明治时最少要吃掉多少个小三明治?
输入描述:
第一行有两个整数R和C,表示三明治桌子有R行C列。
之后的R行,每行C个字母,其中字母N表示沿主对角线切割,Z表示沿次对角线切割。
输出描述:
输出包括R行,每行C个数字,第i行j列表示吃完第i行j列的三明治时最少吃了几个小三明治,如果吃不到,输出-1。
示例1
说明
大概吃的顺序是这样的:
(1,3)
(2,3)
(2,2)
(1,2)
(1,1)
或者:
(1,3)
(2,3)
(2,2)
(2,1)
(1,1)
示例2
输入
复制
5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN
输出
复制
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
备注:
对于全部的数据,

。
CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2733