题目描述

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

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

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

若两块积木左右相邻,图示为:

若两块积木上下相邻,图示为:

若两块积木前后相邻,图示为:

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

输入输出格式

输入格式:

输入文件drawing.in第一行有用空格隔开的2个整数m和n,表示有m*n个格子(1<=m,n<=50)。

接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的个子上摞有多少个积木(1<=每个格子上的积木数<=100)。
输出格式:

输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符串矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。
输入输出样例
输入样例#1:

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

输出样例#1:

……+—+—+…+—+
..+—+ / /|../ /|
./ /|-+—+ |.+—+ |
+—+ |/ /| +-| | +
| | +—+ |/+—+ |/|
| |/ /| +/ /|-+ |
+—+—+ |/+—+ |/| +
| | | +-| | + |/.
| | |/ | |/| +..
+—+—+—+—+ |/…
| | | | | +….
| | | | |/…..
+—+—+—+—+……

说明

NOIP2008普及组第四题

思路

主要还是模拟,主要思路是先确定输出内容的大小,即长和宽,然后“涂鸦”。

-方法是——先后再前,先左后右,先下后上

-对于每一个方块,先找到左下角的点,再吧整个图形覆盖上去

-对于输出内容的长和宽、以及左下角点的坐标的定位(就是找规律)有点复杂,有点长

找到规律后就简单了,也不用那么长。

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
const int MAXN=50+10,MAXM=1000+10;
int f[MAXN][MAXN];
char p[MAXM][MAXM];
int main(){int m,n;cin>>m>>n;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)cin>>f[i][j];}int w=4*n+2*m+1,h=0;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)h=max(h,3*f[i][j]+3+(m-i)*2);}for(int i=1;i<=h;i++){for(int j=1;j<=w;j++)p[i][j]='.';}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){for(int k=1;k<=f[i][j];k++){int x=h-2*(m-i)-3*(k-1),y=4*(j-1)+1+(m-i)*2;for(int t=y+1;t<y+4;t++)p[x][t]=p[x-3][t]=p[x-5][t+2]='-';for(int t=x-1;t>x-3;t--)p[t][y]=p[t][y+4]=p[t-2][y+6]='|';for(int t=x-1;t>x-3;t--)for(int q=y+1;q<y+4;q++)p[t][q]=' ';for(int t=x-2;t>x-4;t--)p[t][y+5]=' ';for(int t=y+2;t<y+5;t++)p[x-4][t]=' ';p[x][y]=p[x-3][y]=p[x][y+4]=p[x-3][y+4]='+';p[x-4][y+1]=p[x-4][y+5]=p[x-1][y+5]='/';p[x-5][y+2]=p[x-5][y+6]=p[x-2][y+6]='+';}}}for(int i=1;i<=h;i++){for(int j=1;j<=w;j++)cout<<p[i][j];cout<<endl;}return 0;
}

【模拟】洛谷 P1058 立体图相关推荐

  1. 【洛谷p1058】立体图(已完结)

    立体图[题目链接] 然后因为有点(不是有点,非常)懵,因此我只能看一步写一步. 首先总体思路: 将三维立体图看做二维平面图,先确定出二维图的长和宽,然后,按照三维立体图的透视顺序,从最后一排的最左开始 ...

  2. 计蒜客 时间复杂度 (模拟) 洛谷 P3952 时间复杂度

    链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...

  3. 洛谷题库P1765手机C语言,[模拟] [洛谷] P1765 手机

    还是困扰了我不少时间的 最早的思路是把题上的串穷举 ↓ 12abc3def4ghi5jkl6mno7pqrs8tuv9wxyz 设按键次数 t                             ...

  4. #模拟#洛谷 1338 末日的传说

    题目 就是求 1 ∼ n 1\sim n 1∼n排列逆序对总数为 m m m,字典序最小 分析 一开始最大逆序对总数为 n ∗ ( n − 1 ) / 2 n*(n-1)/2 n∗(n−1)/2 ( ...

  5. 洛谷2020、2021、2022 CSP-J1 CSP-S1 第1轮 初赛模拟

    1033 - CSP 2020 第一轮(初赛)模拟 试题 - CSP 2020 第一轮(初赛)模拟 - 洛谷有题 [LGR-(-11)]CSP 2020 第一轮(初赛)模拟 - 比赛详情 - 洛谷 U ...

  6. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

  7. 模拟——生活大爆炸版石头剪刀布(洛谷 P1328)

    模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P1328 用if或是switch等来判断,情况实在太多了,特别麻烦. 所以这里采用取巧的办法! 由于是两个人,所以用二维数组存 ...

  8. 模拟——魔法少女小Scarlet(洛谷 P4924)

    模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷 P4924 接下来进行旋转操作 旋转分为两部分,一部分是顺时针旋转,一部分是逆时针旋转 经过观察在我们可以发现顺时针旋转时原来 ...

  9. 模拟——扫雷游戏(洛谷 P2670)

    模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P2670 也是一道简单模拟的题,没有必要列举出8个if语句逐一判断8个方向, 只需要用一个二维数组来保存8个方向即可. 需要注 ...

最新文章

  1. [解题报告]10929 - You can say 11
  2. python2安装_Linux 上安装 appium 的辛酸
  3. flutter 图片转base64_京东技术中台的Flutter实践之路
  4. 如何攻击Java Web应用【转载】
  5. PyTorch常用代码段整理合集
  6. Linux下系统与硬件时钟管理
  7. python报错:xml.parsers.expat.ExpatError: not well-formed (invalid token): line 3, column 1的解决办法
  8. 消除拖延的方法_如何消灭拖延症,并彻底消除想法
  9. 基于C语言EOF与getchar()的使用详解
  10. java url压缩_URL短地址压缩算法 微博短地址原理解析 (Java实现)
  11. 关于LAMP配置Let’s Encrypt SSL证书
  12. 使用XenCenter创建虚拟机在弹出选择语言界面前出现黑屏的可能解决方法
  13. nuxt项目添加百度统计的代码
  14. 使用python批量解压7z格式压缩包
  15. FX5800计算器测量程序集2.4
  16. 财经数据(5)-开盘啦股票标签数据爬虫
  17. java面试题总结-详细分类
  18. [Crypto]ECB模式攻击
  19. 计算机教师师徒结对师傅总结,师徒结对师傅总结
  20. 谁动了你的cookie

热门文章

  1. 苹果IOS浏览器上时间格式不兼容Date问题
  2. Windows平台Go语言环境搭建
  3. java 扫描仪打印机_java打印机
  4. 【附源码】计算机毕业设计java疫情下校园食品安全信息管理设计与实现
  5. LayUI数据表格的使用指南
  6. 王者荣耀皮肤获取很难?用Python教你轻松获取
  7. 策略专题报告:中美科技行业对比(20210107).PDF
  8. java线程堆栈信息分析
  9. 条形码入门指南,让你轻松了解条形码!(三)
  10. CapsLocker for Mac(Capslock键开关)