TouchStone
  Please Login
Login Sign Up
距离CSP第一轮: ??天 距离CSP第二轮: ??天 距离NOIP还有: ??天
 Homepage  Problem Set  Examinations  Submissions  Discussions  Statistics
  • Home
  • Problem Set
  • P1163
  • Problem
  • P1163立体图
    Limits : Time Limit : 10000 MS   Memory Limit : 65536 KB
    Description

    小渊是个聪明的孩子,他经常会给周围的小朋友们展示自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。

    小渊有一块面积为$m\times n$的矩形区域,上面有$m\times n$个边长为$1$的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是$1$),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:

      +---+
     /   /|
    +---+ |  高
    |   | +
    |   |/
    +---+  宽
      长
    

    每个顶点用$1$个加号$\texttt{“+”}$表示,长用$3$个$\texttt{“-”}$表示,宽用$1$个$\texttt{“/”}$,高用两个$\texttt{“|”}$表示。字符$\texttt{+,-,/,|}$的$\texttt{ASCII}$码分别为$43,45,47,124$。字符$\texttt{“.”}$($\texttt{ASCII}$码$46$)需要作为背景输出,即立体图里的空白部分需要用$\texttt{“.”}$来代替。立体图的画法如下面的规则:

    • 若两块积木左右相邻,图示为:
    ..+---+---+
    ./   /   /|
    +---+---+ |
    |   |   | +
    |   |   |/.
    +---+---+..
    
    • 若两块积木上下相邻,图示为:
    ..+---+
    ./   /|
    +---+ |
    |   | +
    |   |/|
    +---+ |
    |   | +
    |   |/.
    +---+..
    
    • 若两块积木前后相邻,图示为:
    ....+---+
    .../   /|
    ..+---+ |
    ./   /| +
    +---+ |/.
    |   | +..
    |   |/...
    +---+....
    

    立体图中,定义位于第$(m,1)$的格子(即第$m$行第$1$列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

    Input Format

    第一行有用空格隔开的$2$个整数$m,n$,表示有$m\times n$个格子($1\leq m,n\leq 50$)。

    接下来$m$行,是一个$m\times n$的矩阵,每行有$n$个用空格隔开的整数,其中第$i$行第$j$列上的整数表示第$i$行第$j$列的格子上摞有多少个积木($1\leq$每个格子上的积木数$\leq 100$)。

    Output Format

    题目要求的立体图,是一个$K$行$L$列的字符矩阵,其中$K$和$L$表示最少需要$K$行$L$列才能按规定输出立体图。

    Sample Input

    3 4
    2 2 1 2
    2 2 1 1
    3 2 1 2

    Sample Output

    ......+---+---+...+---+
    ..+---+  /   /|../   /|
    ./   /|-+---+ |.+---+ |
    +---+ |/   /| +-|   | +
    |   | +---+ |/+---+ |/|
    |   |/   /| +/   /|-+ |
    +---+---+ |/+---+ |/| +
    |   |   | +-|   | + |/.
    |   |   |/  |   |/| +..
    +---+---+---+---+ |/...
    |   |   |   |   | +....
    |   |   |   |   |/.....
    +---+---+---+---+......