• [luoguP1058] 立体图(超级大模拟(¬︿̫̿¬☆))


    传送门

    看到题后整个人成了mengbier

    但是仔细分析一下就很简单了,先确定好输出的图的长和宽。

    然后从输入的矩形的左上角的最下面的开始填充,顺序是从下到上,从左到右,从后往前。

    填充的时候直接覆盖掉原先的就可以。

    代码

    #include <cstdio>
    #include <iostream>
    #define min(x, y) ((x) < (y) ? (x) : (y))
    #define max(x, y) ((x) > (y) ? (x) : (y))
    
    int n, m, N, M;
    int a[51][51];
    char map[1001][1001];
    
    inline int read()
    {
    	int x = 0, f = 1;
    	char ch = getchar();
    	for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
    	for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
    	return x * f;
    }
    
    inline void print(int i, int j, int k)
    {
    	int x, y;
    	x = (n - i) * 2 + (k - 1) * 3 + 1;
    	y = (n - i) * 2 + (j - 1) * 4 + 1;
    	
    	map[x + 4][y + 1] = '/';
    	map[x + 4][y + 5] = '/';
    	map[x + 1][y + 5] = '/';
    	
    	map[x][y] = '+';
    	map[x + 3][y] = '+';
    	map[x][y + 4] = '+';
    	map[x + 3][y + 4] = '+';
    	map[x + 5][y + 2] = '+';
    	map[x + 5][y + 6] = '+';
    	map[x + 2][y + 6] = '+';
    	
    	for(i = y + 3; i <= y + 5; i++) map[x + 5][i] = '-';
    	for(i = y + 1; i <= y + 3; i++) map[x][i] = '-', map[x + 3][i] = '-';
    	
    	for(i = x + 3; i <= x + 4; i++) map[i][y + 6] = '|';
    	for(i = x + 1; i <= x + 2; i++) map[i][y] = '|', map[i][y + 4] = '|';
    	
    	for(i = x + 1; i <= x + 2; i++)
    		for(j = y + 1; j <= y + 3; j++)
    			map[i][j] = ' ';
    	for(i = y + 2; i <= y + 4; i++) map[x + 4][i] = ' ';
    	for(i = x + 2; i <= x + 3; i++) map[i][y + 5] = ' ';
    }
    
    int main()
    {
    	int i, j, k;
    	n = read();
    	m = read();
    	for(i = 1; i <= n; i++)
    		for(j = 1; j <= m; j++)
    		{
    			a[i][j] = read();
    			N = max(N, (n - i) * 2 + a[i][j] * 3 + 3);
    		}
    	M = 4 * m + 2 * n + 1;
    	for(i = 1; i <= N; i++)
    		for(j = 1; j <= M; j++)
    			map[i][j] = '.';
    	for(i = 1; i <= n; i++)
    		for(j = 1; j <= m; j++)
    			for(k = 1; k <= a[i][j]; k++)
    				print(i, j, k);
    	for(i = N; i >= 1; puts(""), i--)
    		for(j = 1; j <= M; j++)
    			putchar(map[i][j]);
    	return 0;
    }
    

      

  • 相关阅读:
    新建安卓项目后,manifest.xml中会出现大段的黄色警告
    TextView设置setCompoundDrawables不生效解决办法
    数据结构->队列->顺序循环队列ADT代码
    数据结构->栈->顺序栈ADT代码
    JAVA环境变量的配置
    计算机科学的范围-----18.12.08
    字符串复制
    扔鸡蛋问题和找零钱问题
    动态规划
    最小二乘法
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/7085256.html
Copyright © 2020-2023  润新知