题目描述

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

小渊有一块面积为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普及组第四题

---------------------------------我是分割线------------------------------------------------------------------

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cstdlib>
 8 using namespace std;
 9 int num[51][51]={{0}};
10 int high=-99999,wide=-99999;
11 char map[301][301]={{'.'}};
12 int read(){
13     int x=0,f=1;char ch=getchar();
14     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
15     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
16     return x*f;
17 }
18 void print(int,int);
19 int main()
20 {
21     std::ios::sync_with_stdio(false);
22     int n,m;
23     cin>>m>>n;
24     wide=4*n+2*m+1;
25     for(int i=1;i<=m;i++)
26      for(int j=1;j<=n;j++)
27     {
28             cin>>num[i][j];
29             high=max(high,num[i][j]*3+2*(m-i+1)+1);
30     }
31     for(int i=1;i<=m;i++)
32      for(int j=1;j<=n;j++)
33       for(int k=0;k<num[i][j];k++)
34       {
35             int x=high-3*(k+2)-2*(m-i)+1;
36             int y=4*j+2*(m-i-1)-1;
37             print(x,y);
38       }
39     for(int i=1;i<=high;i++)
40     {
41         for(int j=1;j<=wide;j++)
42          cout<<map[i][j];
43         cout<<endl;
44     }
45     return 0;
46 }
47 void print(int a,int b){
48     int x,y;
49     x=a+3;y=b;
50     map[x][y]='+';
51     map[x][y+1]='-';
52     map[x][y+2]='-';
53     map[x][y+3]='-';
54     map[x][y+4]='+';
55     map[x-1][y]='|';
56     map[x-1][y+1]=' ';
57     map[x-1][y+2]=' ';
58     map[x-1][y+3]=' ';
59     map[x-1][y+4]='|';
60     map[x-1][y+5]='/';
61     map[x-2][y]='|';
62     map[x-2][y+1]=' ';
63     map[x-2][y+2]=' ';
64     map[x-2][y+3]=' ';
65     map[x-2][y+4]='|';
66     map[x-2][y+5]=' ';
67     map[x-2][y+6]='+';
68     map[x-3][y]='+';
69     map[x-3][y+1]='-';
70     map[x-3][y+2]='-';
71     map[x-3][y+3]='-';
72     map[x-3][y+4]='+';
73     map[x-3][y+5]=' ';
74     map[x-3][y+6]='|';
75     map[x-4][y+1]='/';
76     map[x-4][y+2]=' ';
77     map[x-4][y+3]=' ';
78     map[x-4][y+4]=' ';
79     map[x-4][y+5]='/';
80     map[x-4][y+6]='|';
81     map[x-5][y+2]='+';
82     map[x-5][y+3]='-';
83     map[x-5][y+4]='-';
84     map[x-5][y+5]='-';
85     map[x-5][y+6]='+';
86     return;
87 }

View Code

转载于:https://www.cnblogs.com/SBSOI/p/5575006.html

NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)相关推荐

  1. NOIP 2008 普及组初赛试题 解题报告、题解及选择题思路,高质量

    做题:https://ti.luogu.com.cn/problemset/1003 选择题 第 1 题 微型计算机中,控制器的基本功能是( A). A. 控制机器各个部件协调工作 B. 实现算术运算 ...

  2. P1058 [NOIP2008 普及组] 立体图

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m \times nm×n的矩形区域,上面有m \ ...

  3. noip2008普及组4题题解-rLq

    (啊啊啊终于补到了今天的作业了) 本题地址: http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有 ...

  4. 信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码

    [题目链接] ybt 1942:[08NOIP普及组]ISBN号码 OpenJudge NOI 1.7 29:ISBN号码 洛谷 P1055 [NOIP2008 普及组] ISBN 号码 [题目考点] ...

  5. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  6. NOIP2012 普及组 T4 文化之旅

    文化之旅 (NOIP2012 普及组 T4 ) 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文 ...

  7. P1055 [NOIP2008 普及组] ISBN 号码 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字、11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx

    文章目录 P1055 [NOIP2008 普及组] 题解 Java 代码 关键分析 P1055 [NOIP2008 普及组] 题解 题目链接 Java 代码 package luoguTest;imp ...

  8. 传球游戏【NOIP2008普及组】

    题目:传球游戏[NOIP2008普及组] 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里 ...

  9. 13-luogu-P1055 [NOIP2008 普及组] ISBN 号码

    文章目录 [NOIP2008 普及组] ISBN 号码 问题 题目描述 输入格式 输出格式 样例 样例输入 样例输出 样例 样例输入 样例输出 #2 提示 小白代码 多次提交,解决 "X&q ...

最新文章

  1. YCProgress自定义百分比进度条
  2. MM32F3277 MicroPython移植过程中对应的接口文件
  3. 深入Phtread(三):线程的同步-Condition Variables
  4. maven项目project facets中是2.3调整为3.0的解决办法
  5. Python中的if __name__ == ‘__main__‘
  6. SNMP监控一些常用OID的总结
  7. deepin深度启动盘制作工具下载地址
  8. Chrome安装路径
  9. leetcode113. 路径总和 II
  10. 为什么Java、Python会成为程序员最害怕的编程语言?
  11. C语言编程蛟龙转身,[蓝桥杯][2014年第五届真题]排列序数-题解(C语言代码)
  12. 测试基础【第七篇】测试报告
  13. oracle安装实验,Oracle之课程实验一(安装oracle)
  14. 博客园 编程基础 精华
  15. RGBA转换成RGB
  16. vue划入划出事件_基于Vue.js中对鼠标划过事件的处理方式详解
  17. TE波TM波和TEM波波阻抗
  18. 学UI设计出来可以从事什么工作?
  19. 中国货币政策的动态有效性研究--基于 TVP-SV-FAVAR 模型的实证分析
  20. Unity中模型的面数问题

热门文章

  1. deepin下Clion连接mysql_CLion如何添加依赖库 ? 需要把mysql/Connector c++放入 用cpp连接数据库...
  2. 我的python学习笔记全集_我的python学习笔记
  3. python2.7输入函数_Python2.7的用户输入函数有问题,无法让这些输入与程序一起工作...
  4. Linux GRUB 引导Win 7 ---- error: invalid EFI file path
  5. leetcode 17. 电话号码的字母组合 思考分析
  6. Java Date toString()方法与示例
  7. nginx php fpm 日志,nginx下php-fpm不记录php报错日志怎么办?
  8. input 0.1无法相加_你真的知道0.1+0.2为何不等于0.3吗?
  9. koa2 mysql 中间件_Koa2第二篇:中间件
  10. Linux_linux常用工具------进度条程序