zoukankan      html  css  js  c++  java
  • [luogu p1498] 南蛮图腾

    传送门

    题面

    题目描述

    自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷......帮忙,作为一个好孙子的孙子的孙子的孙子......你能做到吗?

    输入输出格式

    每个数据一个数字,表示图腾的大小(此大小非彼大小) n

    输出格式

    这个大小的图腾

    输入输出样例

    输入样例 #1

    2
    

    输出样例 #1

       /
      /__
     /  /
    /__/__
    

    输入样例 #2

    3
    

    输出样例 #2

           /
          /__
         /  /
        /__/__
       /      /
      /__    /__
     /  /  /  /
    /__/__/__/__
    

    分析

    赤裸裸的谢尔宾斯基三角啊,直接考虑分治输出。
    前导空格的处理有些技巧,详见代码。
    如果你想了解更多的谢尔宾斯基三角形知识,可以戳。(wikipedia

    代码

    很简单的分治递归操作。

    /*
     * @Author: crab-in-the-northeast 
     * @Date: 2020-02-23 16:14:17 
     * @Last Modified by: crab-in-the-northeast
     * @Last Modified time: 2020-02-23 16:32:21
     */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    const int maxn = 2055;
    char a[maxn][maxn];
    
    int qpow(int a,int p) {
        int ans = 1, base = a;
        while(p) {
            if(p & 1) ans *= base;
            base *= base;
            p >>= 1;
        }
        return ans;
    }//快速幂板子。
    
    void draw(int x,int y,int depth) {
        if(depth == 1) {//递归到最小层了,赋值
            a[x][y] = a[x - 1][y + 1] = '/';
            a[x][y + 1] = a[x][y + 2] = '_';
            a[x][y + 3] = a[x - 1][y + 2] = '\';
            return ;
        }
        int h = qpow(2,depth);//这是一个很巧妙的解法,我在这里光说你可能也不会理解,打个草稿
        //你就明白了。
        draw(x,y,depth-1);//分
        draw(x,y + h,depth-1);//分
        draw(x - (h >> 1),y + (h >> 1),depth-1);//分
    }
    
    int main() {
        int n;
        scanf("%d",&n);
        memset(a,' ',sizeof(a));//初始化为空格
    
        int h = qpow(2,n);
        draw(h,1,n);
        for(int i = 1; i <= h; i++,puts(""))
            for(int j = 1; j <= h * 2; j++)
                printf("%c",a[i][j]);
        printf("
    ");
        return 0;
    }
    

    评测结果

    AC 100R30979237

  • 相关阅读:
    拷贝构造函数的用法
    虚基类的用法
    函数模板的用法,以及类外定义的注意事项
    怎么学好python?
    树状数组单点更新和区间查询
    线段树的基本操作
    快排算法的实现
    react-redux 中 connect 的常用写法
    ant-design表单处理和常用方法及自定义验证
    ionic 签名、打包
  • 原文地址:https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p1498.html
Copyright © 2011-2022 走看看