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

恩。。。普及-

题目大意估计都知道。。

给个传送门:   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. css之多行居中

    需求: 单行到多行文字居中. <div> <p>应该为数组中的每个子代分配一个唯一的键.表格dataSource和中的值columns应遵循此规则.默认情况下</p> ...

  2. yield再理解--绝对够透彻

    首先,拿好宝剑: 先把yield看做“return”, 普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了. 看做return之后再把它看做一个是生成器(generat ...

  3. LOJ3123 CTS2019 重复 KMP自动机、DP、多项式求逆

    传送门 CTS的计数题更完辣(撒花 Orz zx2003,下面的内容在上面的博客基础上进行一定的补充. 考虑计算无限循环之后不存在子串比\(s\)字典序小的串的个数.先对串\(s\)建立KMP自动机, ...

  4. 14-2 SQL语言简介

    1.结构化查询语言(Structured Query Language,SQL),常被读作sequel,最初是由Microsoft.Sybase和Ashton-Tate这3家公司共同开发的. 2.Wi ...

  5. ssh免秘钥

    用过好几次免秘钥,但是每次都会忘了应该把copy谁的公钥到另外用户的.ssh文件夹 这里专门记录一次 注意点: A要使用ssh免密登录到B用户下(可以使远程服务器),就把A的用户下的.ssh文件的id ...

  6. Layui学习笔记(一)—— 关于模块的扩展

    在使用layui的时候,总有官方自带模块不够用想自己扩展的时候,这时候我们就需要扩展模块了. 模块扩展有两种: (一)普通地扩展 layui.define( function (exports) { ...

  7. js 算法,数组排序

    冒泡排序.给数组按数字从小到大依次排序 arr = [1, 6, 7, 8, 9, 5, 18]; //最外层指针i从左到右依次循环指向,当最内层的指针循环一圈后,指针i才指向下个位置 //最内层指针 ...

  8. Fortify漏洞之Portability Flaw: Locale Dependent Comparison

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: Locale Dependent Comparison 漏洞进行总结,如下: 1.Portability Flaw ...

  9. Android数据存储原理分析

    Android上常见的数据存储方式为: SharedPreferences是 Android 中比较常用的存储方法,本篇将从源码角度带大家分析一下Android中常用的轻量级数据存储工具SharedP ...

  10. C++创建和使用动态链接库

    一个简单的动态链接库的生成和调用例子,太过简单,大神请绕道. 一.创建动态链接库 使用vs创建工程选择动态链接库. 在项目中创建源文件和头文件,并在文件中添加以下代码. 在头文件中添加以下代码 // ...