#P1374. Crosswords

Crosswords

P1374. 横向填字游戏

问题描述

一个横向填字游戏可以存储为一个$$ m x n $$的矩阵,其中 00 表示白色方格,11 表示黑色方格。某些方格会被编号,并且这些编号对应着需要填入横向或纵向单词的描述。一个方格会被编号,如果它是白色方格,并且满足以下条件之一:

  • (a) 其下方的方格是白色,并且其上方没有白色方格。
  • (b) 其左侧没有白色方格,并且其右侧的方格是白色。

方格的编号从左到右、从上到下依次进行。

从矩阵可以绘制出一个横向填字图。在图中,每个方格用一个 $$4x6$$ 的字符框表示。黑色方格和白色方格(编号和未编号的方格)的表示如下(其中 nnn 是方格的编号):

对于黑色方格:

++++++
++++++
++++++
++++++

对于编号的白色方格:

++++++
+nnn +
+    +
++++++

对于未编号的白色方格:

++++++
+    +
+    +
++++++

框中的其余字符为空格。如果边缘有黑色方格,则应从图中移除这些方格(见示例)。仅使用必要的空格作为填充字符。行尾不要使用任何不必要的空格。


输入

输入由若干块组成,每块表示一个横向填字游戏。每块的第一行包含两个整数 mmnn(均小于 25),以空格分隔。接下来的 mm 行中,每行包含 nn0011,以空格分隔。最后一块是空的,即 $$m = n = 0$$。


输出

对于除最后一块外的每个块,输出对应的横向填字图。每个图后跟两个空行。


输入示例 1

6 7
1 0 0 0 0 1 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0
0 1 0 0 1 1 1
0 0 0 1 0 0 0
1 0 0 0 0 0 1
5 3
1 0 1
0 0 0
1 1 1
0 0 0
1 0 1
0 0

输出示例 1

     +++++++++++++++++++++
     +001 +    +002 +003 +
     +    +    +    +    +
++++++++++++++++++++++++++++++++++++
+004 +    ++++++005 +    +006 +007 +
+    +    ++++++    +    +    +    +
++++++++++++++++++++++++++++++++++++
+008 +    +009 +    +    +010 +    +
+    +    +    +    +    +    +    +
+++++++++++++++++++++    +++++++++++
+    ++++++011 +    +
+    ++++++    +    +
++++++++++++++++++++++++++++++++++++
+012 +013 +    ++++++014 +015 +    +
+    +    +    ++++++    +    +    +
++++++++++++++++++++++++++++++++++++
     +016 +    +    +    +    +
     +    +    +    +    +    +
     ++++++++++++++++++++++++++


     ++++++
     +001 +
     +    +
++++++++++++++++
+002 +    +    +
+    +    +    +
++++++++++++++++


++++++++++++++++
+003 +004 +    +
+    +    +    +
++++++++++++++++
     +    +
     +    +
     ++++++

来源

Central Europe 1996

如果需要进一步帮助,请告诉我!