luoguP1058:立体图 (真的不是娱乐向_(:з」∠)_)

题目描述

小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。

小渊有一块面积为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列才能按规定输出立体图。

输入输出样例

输入样例#1:

3 4
2 2 1 2
2 2 1 1
3 2 1 2

输出样例#1:

......+---+---+...+---+
..+---+  /   /|../   /|
./   /|-+---+ |.+---+ |
+---+ |/   /| +-|   | +
|   | +---+ |/+---+ |/|
|   |/   /| +/   /|-+ |
+---+---+ |/+---+ |/| +
|   |   | +-|   | + |/.
|   |   |/  |   |/| +..
+---+---+---+---+ |/...
|   |   |   |   | +....
|   |   |   |   |/.....
+---+---+---+---+......

说明

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列才能按规定输出立体图。

输入输出样例

输入样例#1:

3 4
2 2 1 2
2 2 1 1
3 2 1 2

输出样例#1:

......+---+---+...+---+
..+---+  /   /|../   /|
./   /|-+---+ |.+---+ |
+---+ |/   /| +-|   | +
|   | +---+ |/+---+ |/|
|   |/   /| +/   /|-+ |
+---+---+ |/+---+ |/| +
|   |   | +-|   | + |/.
|   |   |/  |   |/| +..
+---+---+---+---+ |/...
|   |   |   |   | +....
|   |   |   |   |/.....
+---+---+---+---+......

说明

NOIP2008普及组第四题

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---分割线+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---

芒果君:调了半个小时发现数组开小啦QAQ 反正就是一道特别鬼畜的题…………具体就是先计算出最后图像的长宽然后按顺序各种推公式把小的图像一层一层复制上去,其实也不难(可是真的有人喜欢打这种鬼畜的题吗………………)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 100010
#define inf 1<<29
using namespace std;
const char block[6][8]={
   "..+---+",
   "./   /|",
   "+---+ |",
   "|   | +",
   "|   |/.",
   "+---+.."
};
int n,m,N,M,a[66][66],mp[666][666];
void draw(int x,int y){for(int i=0;i<6;++i) for(int j=0;j<7;++j) if(block[i][j]!=‘.‘) mp[i+x][j+y]=block[i][j];}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",&a[i][j]);
    for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) N=max(N,3*a[i][j]+1+2*(n-i+1));
    M=m*4+1+n*2;
    for(int i=1;i<=N;++i) for(int j=1;j<=M;++j) mp[i][j]=‘.‘;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j){
            int x=N-(n-i)*2,y=(n-i)*2+(j-1)*4+1;
            while(a[i][j]--){
                draw(x-5,y);
                x-=3;
            }
        }
    for(int i=1;i<=N;++i){
        for(int j=1;j<=M;++j) printf("%c",mp[i][j]);
        puts("");
    }
    return 0;
}
时间: 2024-08-28 20:19:56

luoguP1058:立体图 (真的不是娱乐向_(:з」∠)_)的相关文章

这个是转的。学完就删_(:з」∠)_

原文链接:http://blog.csdn.net/cc_again/article/details/25866971 好多dp:http://blog.csdn.net/cc_again/article/category/1261899 一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见的.主要包括递推.背包.LIS(最长递增序列),LCS(最长公共子序列),下面针对这几种类型,推荐一下比较好的学习资料和题目. 1.递推: 递推一般形式比较单一,从前往后,

_(:3」∠)_

此页面为WP8"_(:3」∠)_ "应用的发布页面. _(:3」∠)_是一款收集日本颜文字的WP8端应用. 此页面主要记录开发进度.APP发布等情况. -------------------相关进度--------------------- 目前进度:UI相关资源前期准备中,各相关开放平台的AppID申请中...

最近康熙来了萧敬腾说男孩女孩的时候,感觉小S真的伤心了娱乐八卦天涯论坛

@hema_131 18楼 2013-02-01 21:54:31 不喜欢重男轻女的人 ----------------------------- @pink_cw 26楼 2013-02-01 22:06:43 萧敬腾不是重男轻女好么 人家说了 已经有一个干女儿了 人家希望只有一男一女两个干娃儿(据说是林熙蕾规定的) 问题是 你真的觉得萧敬腾是那么恶心可恶的人么? 他和小S无冤无仇的 他干嘛没事去戳小s的痛处啊 他又不是傻子 没事给自己树敌 而且和小S也没有利益冲突 他只是很单纯的叙述了自己的

【时尚线人】驳样记:学陈蓉玩撞色_陈蓉吧_百度贴吧

[时尚线人]驳样记:学陈蓉玩撞色_陈蓉吧_百度贴吧 [时尚线人]驳样记:学陈蓉玩撞色 只看楼主 收藏 回复 lizchr 铁杆会员 8 还记得我们节目前几天播出的主持人陈蓉拍写真的情景吗,那从今天开始,我们的时尚线人版块将推出一项全新的策划,那就是让我们的平民老百姓根据名人的穿着打扮来做一个全新的克隆,名为驳样记.那今天我们就从陈蓉开始. 陈蓉:现在是让我选一套让大家去小店找 是吧 对 那我降低难度选一套简单一点的其他的小礼服和长礼服的话可能选起来难度比较高 像这套我想大家生活中都能穿吧 它这个

踩坑之路_&quot;var name = &#39; &#39;;&quot;_迷之BUG

情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达战场.....),mouseup时更具当前的全局属性值判断生成的图表类型:就酱... 首先给大家贴个html布局,有图有真相,(虽然简单的要死)正常结果应该是:拖拽 '折线图' 右侧生成折线图,柱状图生成柱状图: 然后我帅气的用 var name = ''; 从此开启bug模式: js代码如下: 出

多线程_创建线程_继承Thread类

public class ThreadDemo {   public static void main(String[] args){         Demo d = new Demo();   d.start();      for(int i = 0;i < 100;i++){      System.out.println("MainThread" + i);   }   } } class Demo extends Thread {   public void run(

图形学_多边形扫描转换_边界标志算法

边界标志算法 1. 对多边形的每一条边进行扫描转换,即对多边形边界所经过的象素作一个边界标志. 2.填充 对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该扫描线上的象素. 取一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真.若点在多边形外,则inside为假. Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反.对未打标志的点,inside不变. 1 #include "easyx.h" 2 #include &qu

结对编程_附加题_博客2

1.界面模块,测试模块和核心模块的松耦合 2.改进程序 结对编程_附加题_博客2

逻辑运算_三元运算符_程序流程控制

 //逻辑运算符   /*       逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 .      "&"和"&&"的区别: 单&时,左边无论真假,右边都进行运算:       双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算.       "|"和"||"的区别同理,||表示:当左边为真