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 PEP8 编码规范中文版
    MySQL分区表
    mybatis缓存,包含一级缓存与二级缓存,包括ehcache二级缓存
    斐讯K2刷不死breed与第三方固件教程
    Mysql 多表连接查询 inner join 和 outer join 的使用
    mysql多表关联删除示例
    sublime Text 几款插件
    多进程vs多线程
    git 命令常用总结
    LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p1498.html
Copyright © 2011-2022 走看看