NOIP2008 立体图
题目描述
小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。
小渊有一块面积为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列才能按规定输出立体图。
输入输出样例
3 4
2 2 1 2
2 2 1 1
3 2 1 2
......+---+---+...+---+
..+---+ / /|../ /|
./ /|-+---+ |.+---+ |
+---+ |/ /| +-| | +
| | +---+ |/+---+ |/|
| |/ /| +/ /|-+ |
+---+---+ |/+---+ |/| +
| | | +-| | + |/.
| | |/ | |/| +..
+---+---+---+---+ |/...
| | | | | +....
| | | | |/.....
+---+---+---+---+...... 拿到题目以后就感觉如果要编好这道题需要一定的耐心(嗯这么多立方体会被搞得有点烦)。。。 思路 建立一个画布,我们在画布上面打印立方体,我们可以用覆盖打印的方法来解决前后立方体在画布上的前后问题。
要覆盖打印,我们需要从左到右,从后到前,从下到上打印。
建立一个print(x,y)过程来打印坐标为x,y的立方体,(x,y)这个点为这个立方体的左下角. 然后就有了几件非常有趣的事情,要打印这些立方体,给出它的行号,列好以及它在第几层,求它的左下角的点的坐标。
我们设h为此立方体在从前到后第h行,c为此立方体从下往上第c层,l为此立方体从左到右第l个。
则得到print(x,y)的坐标 x=1+3l+2h
y=1+2h+3c 然后使用print(x,y)来打印就好啦! 代码
var
p:array[..,..] of longint;
map:array[..,..] of char;
qh,qk,mb:longint;
n,m:longint;
i,j,k,xx,yy:Longint;
procedure print(x,y:longint); //print在画布上打印立方体
begin
map[x,y]:='+';map[x,y+]:='-';map[x,y+]:='-';map[x,y+]:='-';map[x,y+]:='+';
map[x-,y]:='|';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:='|';map[x-,y+]:='/';
map[x-,y]:='|';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:='|';map[x-,y+]:=' ';map[x-,y+]:='+';
map[x-,y]:='+';map[x-,y+]:='-';map[x-,y+]:='-';map[x-,y+]:='-';map[x-,y+]:='+';map[x-,y+]:=' ';map[x-,y+]:='|';
map[x-,y+]:='/';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:=' ';map[x-,y+]:='/';map[x-,y+]:='|';
map[x-,y+]:='+';map[x-,y+]:='-';map[x-,y+]:='-';map[x-,y+]:='-';map[x-,y+]:='+';
end;
begin
readln(m,n);
qh:=;
qk:=;
mb:=;
fillchar(map,sizeof(map),'.');
for i:=m downto do
for j:= to n do
begin
read(p[i,j]);
if (+i*+p[i,j]*>qh) then
qh:=+i*+p[i,j]*;
if (+j*+*i>qk) then
qk:=+j*+*i;
if p[i,j]>mb then mb:=p[i,j];
//此处是一堆无用的代码
end;
for k:= to mb do //从底层往顶层
begin
for i:=m downto do //从后排到前排
begin
for j:= to n do //从左边到右边
begin
if p[i,j]<= then continue; //按照输入打印
dec(p[i,j]); //减掉已经打印的
xx:=qh-(+(i-)*+(k-)*); //计算print的x
yy:=+*(j-)+*(i-); //计算print的y
print(xx,yy) //打印
end;
end;
end;
for i:= to qh- do
begin
for j:= to qk do
write(map[i,j]); //输出
writeln;
end;
end.
画布要开够大但是不要太大爆掉,我就第一次交的时候没有注意画布数组的大小直接爆掉(自己骂自己傻逼),改了以后A掉,自认为挺水的。
NOIP2008 立体图的更多相关文章
- NOIP 2008 立体图
洛谷 P1058 立体图 洛谷传送门 JDOJ 1541: [NOIP2008]立体图 T4 JDOJ传送门 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备 ...
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
- noip2008普及组4题题解-rLq
(啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...
- NOIP2008普及组 题解 -SilverN
T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...
- NOIP2008普及组题解
NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...
- luoguP1058:立体图 (真的不是娱乐向_(:з」∠)_)
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- NOIP2008 ISBN号码(一桶水)【A005】
[A005]NOIP2008 ISBN号码(一大桶水)[难度A]———————————————————————————————————————————————————————————————————— ...
随机推荐
- 【vagrant】硬盘扩容
如题,笔者之前一直在使用vagrant作为虚拟机使用. vagrant的好处自然不必说,只是有一天遇到了一个麻烦事--虚拟硬盘空间不!够!了! 笔者使用了df -h命令一看,结果发现,主硬盘(/dev ...
- 2018-2019-2 网络对抗技术 20165337 Exp1 PC平台逆向破解(BOF实验)
实验内容 直接修改程序,跳转到getShell函数. 使用BOF攻击,覆盖返回地址,触发getShell函数. 注入一个自己的shellcode并运行. 任务一:直接修改程序,跳转到getShell函 ...
- static 关键字 静态成员变量及静态成员函数
static类成员 类成员类似于C语言的全局变量,但是与全局变量又有所不同,例如,全局变量是可以被任何的用户代码所修改,而且全局变量破坏了对象的封装性. 使用类的 static 成员的优点 使用 st ...
- activemq之python使用stomp协议
参考链接: 安装:https://pypi.org/project/stomp.py/4.1.8/#history https://www.cnblogs.com/andylhc/p/9337945. ...
- APP测试中iOS和Android的区别
一.常识性区别 二.导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击.也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的.还有新闻类的应用. Android:一般放在页 ...
- 关于mvc中传递匿名对象,view中无法解析
最近做项目用到MVC,发现用linq查询得到的数据是匿名类型对象,通过模型绑定.或者ViewBag.ViewData进行数据传递后,View解析报错:“object 未包含xx的定义”: 没找到好的解 ...
- 防XSS攻击解决方法
1.web.xml文件中新增filter配置 <!-- URL请求参数字符过滤或合法性校验 --> <filter> <filter-name>XssFilter& ...
- 饮冰三年-人工智能-Python-29瀑布流
多适用于:整版以图片为主,大小不一的图片按照一定的规律排列的网页布局. 1:创建model类,并生成数据表 from django.db import models # Create your mod ...
- IntelliJ IDEA 创建 Java包
一.创建包 1.在已有项目的"src"文件夹 -> 右键 -> New -> Package 2.命名包名,注意命名规范 二.创建类 1.新建包成功之后,在包上右 ...
- dataGridView笔记
最近用dataGridView比较多,先把代码备份在这里,有时间系统总结一下 using FindId.DAL; using FindId.Model; using System; using Sys ...