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

恩。。。普及-

题目大意估计都知道。。

给个传送门:   luogu

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

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

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

#include <iostream>
#include <cstdio>
#define Max 5009
#define INF 1e7
using namespace std;
char map[Max][Max];
int number[Max / 60][Max / 60];
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 = 0;char word = getchar ();while (word < '0' || word > '9')word = getchar ();while (word >= '0' && word <= '9'){now = now * 10 + (int)(word - '0');word = getchar ();}
}
void Put (int x, int y)  //以下为构建一个立方体
{map[x][y] = map[x][y - 4] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = '-';map[++x][--y] = map[x][y - 4] = '/';map[x][y + 1] = '|';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[++x][--y] = map[x][y - 4] = '+';map[x][y + 2] = '|';for (int i = 1; i <= 3; i++)map[x][y - i] = '-';map[x][y + 1] = ' ';map[++x][y] = map[x][y - 4] = '|';map[x][y + 2] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[x][y + 1] = ' ';map[++x][y] = map[x][y - 4] = '|';map[x][y + 1] = '/';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[++x][y] = map[x][y - 4] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = '-';
}
int main (int argc, char *argv[])
{int N;int M;read (N);read (M);int k;int X = N * 30;int Y = M * 30;int x = X, y = Y + 4;int up = INF, L = INF;int down = -INF, R = -INF;for (int i = 1; i <= N; i++){for (int j = 1; j <= M; j++){read (k);x = X;y = Y + j * 4;down = max (down, x); //  注意!!! 记录下界要放在操作的上面,我的时间都浪费在了这上面 while (k--){Put (x - 4, y + 6);x -= 3;  //  每个格子的立方体由下不断往上放
            }R = max (R, y); // 记录其他边界 up = min (up, x);L = min (L, y);}X += 2;Y -= 2;}for (int i = up - 1; i <= down + 1; i++){for (int j = L; j <= R + 6; 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 0;
}

转载于:https://www.cnblogs.com/ZlycerQan/p/6361518.html

luogu P1058 立体图相关推荐

  1. 【模拟】洛谷 P1058 立体图

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

  2. NOIP普及组历届真题(1997~2018)

    供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...

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

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

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

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

  5. GMOJ - 2021.07.20【普及组】模拟赛C组 - 排座椅(seat)、传球游戏(ball)、立体图(drawing)、间谍派遣、seek

    文章目录 luogu博客链接 GMOJ - 2021.07.20[普及组]模拟赛C组 - 排座椅(seat).传球游戏(ball).立体图(drawing).间谍派遣.seek T1 排座椅(seat ...

  6. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  7. [Luogu] 选学霸

    https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...

  8. Luogu 2470 [SCOI2007]压缩

    和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...

  9. 【Luogu】P1613 跑路

    [Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资 ...

最新文章

  1. 体重18公斤北航新生报到!高考645分,立志改变世界“做中国的霍金”
  2. Linux CentOS7 rsync通过服务同步、linux系统日志、screen工具
  3. 每天一道LeetCode-----判断给定字符串是否符合某个模式
  4. git 代码回滚_能提交到远程的Git回滚
  5. arr数组怎么取值_记一次思否问答的问题思考:Vue为什么不能检测数组变动
  6. ArrayList和LinkedList使用不当,性能差距会如此之大!
  7. Spring Bean的生命周期例子
  8. Java中静态代码块
  9. power bi形状地图_如何使用内置形状图在Power BI中创建地理图
  10. 两列float引起的父容器高度失效的解决办法
  11. java多商户商城系统源码下载
  12. PSPNet | 语义分割及场景分析
  13. 解二元一次方程组的c语言编程,我有一个C语言解二元一次方程组的程序需要解释说明...
  14. BZOJ 1050: [HAOI2006]旅行comf
  15. win10 修复打印机服务器,Win10专业版打印机无法启动print spooler服务怎么修复?
  16. 音视频开发-SRS 4.0流媒体服务器系列
  17. 填坑—c语言写单片机中断程序无法返回到中断点—解决办法
  18. Xftp无法与192.168.xx.xx连接 SSH服务器拒绝了密码。请再试一次。
  19. 收藏的一些幽默搞笑文章
  20. linux-scp上传下载

热门文章

  1. java getscale_Java MajorType.getScale方法代碼示例
  2. 新建一个文件夹服务器,云服务器中新建文件夹命令
  3. 二进制求和Python解法
  4. android触摸屏idc,Android触摸屏IDC
  5. 一直在构建版本_构建系统与代码结构SpringBoot
  6. html 滚动条停止事件,CSS scroll-snap滚动事件停止及元素位置检测实现
  7. 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
  8. mysql跨进程锁_python基于mysql实现的简单队列以及跨进程锁
  9. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
  10. 搜索文献_【大牛经验分享】如何高效快捷搜索文献?