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

恩。。。普及-

题目大意估计都知道。。

给个传送门:   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. LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演

    传送门 为了方便我们设\(N\)是\(N,M,L\)中的最小值,某一个位置\((x,y,z)\)所控制的位置为集合\(\{(a,b,c) \mid a = x \text{或} b = y \text ...

  2. k8s yaml格式的pod定义文件完整内容

    apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...

  3. 前端开发 Angular

    https://www.angularjs.net.cn/tutorial/18.html

  4. BUAA_OO第四单元总结性博客作业——UML(Floyd实现规则检查?)

    一.架构设计 1.UML第一次作业——类图 第一次作业基于不同element在UML规格中的从属关系来设计架构.继承了UmlInteraction接口的MyUmlInteraction类是主要的交互层 ...

  5. python3基础之“小练习(2)”

    (十三)创建一个你最喜欢歌手的列表. # singer=list() # singer=['a','b','c'] # print(singer) (十四)创建一个由元组构成的列表,每个元组包含居住过 ...

  6. stage1----航空票务系统需求分析报告

    航空票务管理系统需求分析报告 题    目    航空票务管理系统需求分析报告 学    院       信息科学与工程学院 专    业        计算机科学与技术 组    员         ...

  7. day26-python之封装

    1.动态导入模块 # module_t=__import__('m1.t') # print(module_t) # module_t = __import__('m1.t') # print(mod ...

  8. 修改Mysql 字符集,支持Emoji表情

    插入失败 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 at ...

  9. 【hadoop】MapReduce分布式计算框架原理

    PS:实操部分就省略了哈,准备最近好好看下理论这块,其实我是比较懒得哈!!! <?>MapReduce的概述 MapReduce是一种计算模型,进行大数据量的离线计算.MapReduce实 ...

  10. kubeadm添加新master或node

    一.首先在master上生成新的token kubeadm token create --print-join-command [root@cn-hongkong nfs]# kubeadm toke ...