zoukankan      html  css  js  c++  java
  • 【洛谷习题】南蛮图腾

    题目链接:https://www.luogu.org/problemnew/show/P1498


    不好实现。。。

    这道题在洛谷的分类是分治,我用的方法就是分治,不过却刷新的我对分治的认识。以前见过的分治都是用类似动态规划中的填表法,针对当前状态,用之前的状态推出;而这里的做法却类似于刷表法,针对当前状态,去推之后的状态。

    当大小为1时,答案是确定的,当大小大于1时,我们可以由1时的答案推出:将已有答案向下复制一下,再向右复制一下。开一个二维数组来保存,中间的空格就可以被数组中的空字符代替,只需要控制行首的空格就可以了。

    补充一点,这种图形叫做谢尔宾斯基三角形。

     1 #include <cstdio>
     2 
     3 const int maxl = 1050;
     4 
     5 char mt[maxl][2 * maxl];
     6 
     7 int main() {
     8     mt[1][1] = '/';
     9     mt[1][2] = '\';
    10     mt[2][1] = '/';
    11     mt[2][2] = '_';
    12     mt[2][3] = '_';
    13     mt[2][4] = '\';
    14     int n;
    15     scanf("%d", &n);
    16     for (int i = 1; i <= n; ++i) {
    17         int h = 1 << i;
    18         for (int j = 1; j <= h; ++j)
    19             for (int k = 1; k <= 2 * h; ++k)
    20                 mt[h + j][k] = mt[h + j][2 * h + k] = mt[j][k];
    21     }
    22     for (int i = 1; i <= (1 << n); ++i) {
    23         for (int j = (1 << n) - i; j >= 1; --j) putchar(' ');
    24         for (int j = 1; j <= (1 << (n + 1)); ++j)
    25             putchar(mt[i][j] ? mt[i][j] : ' ');
    26         putchar('
    ');
    27     }
    28     return 0;
    29 }
    AC代码
  • 相关阅读:
    Git 创建仓库并拉取代码
    Linux export 命令
    Linux ps 命令
    Linux sed 命令
    Linux find 命令
    Linux chmod 命令
    Linux chgrp 命令
    解除/配置 linux/nginx 的 tcp 连接(nginx配置文件日常配置推荐)
    更改Ubuntu的apt源
    anaconda 各版本的下载地址
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9762972.html
Copyright © 2011-2022 走看看