做了这个题后明确了自己的定位。。。

恩。。。普及-

题目大意估计都知道。。

给个传送门:   luogu

做了半上午 + 一整个下午的题。。。
占了我今天到的绝大多数时间。
其实此题不难, 核心代码我很快就写了出来
但是我做的方法非常神奇
出了一个非常隐秘的问题,导致我浪费了很多时间在查错上面

思路:
核心代码就是构建一个立方体
我的立方体是从右上角开始构建的
由分析可知:只要从一开始的地方挨个放置,就可以覆盖后面的
所以不必考虑重叠或谁在前谁在后的问题
我是枚举的每个立方体图形的右下角
然后在构建的过程中记录上下左右四个方位所延展的最大位置即可

但是我的做法有个最不同的地方是:
我是随便找了个地方作为起始点的,因为靠近边界的话会数组越界。。
所以直接近似于随机一个点。。

#include <iostream>
#include <cstdio>
#define Max 5009
#define INF 1e7
using namespace std;
char map[Max][Max];
int number[Max / ][Max / ];
inline int max (int a, int b)
{
return a > b ? a : b;
}
inline int min (int a, int b)
{
return a < b ? a : b;
}
inline void read (int &now)
{
now = ;
char word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + (int)(word - '');
word = getchar ();
}
}
void Put (int x, int y) //以下为构建一个立方体
{
map[x][y] = map[x][y - ] = '+';
for (int i = ; i <= ; i++)
map[x][y - i] = '-';
map[++x][--y] = map[x][y - ] = '/';
map[x][y + ] = '|';
for (int i = ; i <= ; i++)
map[x][y - i] = ' ';
map[++x][--y] = map[x][y - ] = '+';
map[x][y + ] = '|';
for (int i = ; i <= ; i++)
map[x][y - i] = '-';
map[x][y + ] = ' ';
map[++x][y] = map[x][y - ] = '|';
map[x][y + ] = '+';
for (int i = ; i <= ; i++)
map[x][y - i] = ' ';
map[x][y + ] = ' ';
map[++x][y] = map[x][y - ] = '|';
map[x][y + ] = '/';
for (int i = ; i <= ; i++)
map[x][y - i] = ' ';
map[++x][y] = map[x][y - ] = '+';
for (int i = ; i <= ; i++)
map[x][y - i] = '-';
}
int main (int argc, char *argv[])
{
int N;
int M;
read (N);
read (M);
int k;
int X = N * ;
int Y = M * ;
int x = X, y = Y + ;
int up = INF, L = INF;
int down = -INF, R = -INF;
for (int i = ; i <= N; i++)
{
for (int j = ; j <= M; j++)
{
read (k);
x = X;
y = Y + j * ;
down = max (down, x); // 注意!!! 记录下界要放在操作的上面,我的时间都浪费在了这上面
while (k--)
{
Put (x - , y + );
x -= ; // 每个格子的立方体由下不断往上放
}
R = max (R, y); // 记录其他边界
up = min (up, x);
L = min (L, y);
}
X += ;
Y -= ;
}
for (int i = up - ; i <= down + ; i++)
{
for (int j = L; j <= R + ; j++)
if (map[i][j] == '|' || map[i][j] == '/' || map[i][j] == '+' || map[i][j] == '-' || map[i][j] == ' ')
printf ("%c", map[i][j]);
else
printf (".");
printf ("\n");
}
return ;
}

luogu P1058 立体图的更多相关文章

  1. P1058 立体图题解

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

  2. P1058立体图(面对代码解释)

    传送 样例: 输出样例: (洛谷上面的那个太丑了就不放了) 大佬博客在此 乍一看好像真的没有什么思路 所以我们结合ybr大佬的代码进行分析 疑点都将在代码下面进行分析(面对代码做题模式开始) #inc ...

  3. P1058立体图

    一道大模拟 思路: 首先是打表找规律时间 仔细思考(暴力手算)后推出这么一个数组: //宽的增加量 ]={,,,};//1竖着摞,2横着摞,3前后摞 //长的增加量 ]={,,,};//1竖着摞,2横 ...

  4. P1058 立体图

    链接:Miku ------------------------------ 蒟蒻在线%lmk,ljx,lpy,yyq大佬们 ------------------------------ Good N ...

  5. NOIP 2008 立体图

    洛谷 P1058 立体图 洛谷传送门 JDOJ 1541: [NOIP2008]立体图 T4 JDOJ传送门 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备 ...

  6. 模拟画图题P1185 绘制二叉树

      题目链接P1185 绘制二叉树 题意概述   根据规则绘制一棵被删去部分节点的满二叉树.节点用 \(o\) 表示,树枝用/\表示.每一层树枝长度会变化,以满足叶子结点有如下特定: 相邻叶子节点是兄 ...

  7. 2019.7.12 sdfzoier做题统计

    lixf_lixf :9 P1981 表达式求值 P1076 寻宝 P1199 三国游戏 P1308 统计单词数 P1190 接水问题 P1158 导弹拦截 P1070 道路游戏 P1069 细胞分裂 ...

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

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

  9. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

随机推荐

  1. 论文笔记 Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression

    Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression 该文献采用一个新型 ...

  2. Oracle开放1521端口 telnet不通解决办法

    在windosw虚拟机server2012上安装Oracle数据库后,远程连接失败,报 java.sql.SQLException: The Network Adapter could not est ...

  3. 1.1 文档PUT内部原理

    文档更新原理:       PUT 一条数据的时候,如果是全量替换,ES并不会覆盖原来的文档,而是新创建一个文档,并将version+1,原文档标记为deleted,不会立刻物理删除.ES会在集群的d ...

  4. C# 后台获取GridView列表的值

    int rowIndex = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;//获取gridview中的行号            ...

  5. 修改redhat7默认显示语言从中文为英文

    [delmore@localhost Desktop]$ su                               //切换到最高权限 Password:                    ...

  6. RedisCluster的rename机制失败报错,解决又是数据倾斜问题

    需求说明:spring session中的用户session更新是更新key的名字,所以对于key的操作时需要用newkey 替换oldkey value值只允许存在一个,这里用到rename就很合适 ...

  7. unity获取ugui上鼠标位置

    public class GetMousePos : MonoBehaviour { public Canvas canvas;//画布 private RectTransform rectTrans ...

  8. 美化shell

    Linux终端提示符颜色美化: (一)大致步骤:vim ~/.bashrc中设置PS1的值.保存后执行生效:source ~/.bashrc (二)PS1的值推荐:推荐1多色显示:用户白色:全路径(\ ...

  9. datatables 自定义排序

    参考:https://datatables.net/examples/plug-ins/sorting_manual $.fn.dataTable.ext.type.order['salary-gra ...

  10. Mysql8.0.17安装(windows10)

    1.因为系统重装  又双叒叕开始了装mysql数据库 下载安装包 https://dev.mysql.com/downloads/mysql/ 2.解压到你想安装的地方 3.解压完是没有图红色框中的文 ...