HRBUST 2085 囧 分型法

题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2085

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int mapsize = 1000;
void draw(const int n, char map[][mapsize], const int r, const int c)
{
    int size = (1 << (n + 2));
    map[r][c] = map[r + size - 1][c + size - 1] = map[r][c + size - 1] = map[r + size - 1][c] = '+';
    for (int i = 1; i < size - 1; i++)
    {
        map[r][c + i] = map[r + size - 1][c + i] = '-';
        map[r + i][c] = map[r + i][c + size - 1] = '|';
    }
    
    if (n == 0) return;
    
    for (int i = 2; i < size / 2 - 1; i++)
    {
        map[r + i][c + size / 2 - i] = '/';
        map[r + i][c + size / 2 + i - 1] = '\\';
    }
    
    draw(n - 1, map, r + size / 2, c + size / 4);
}

int main()
{
    int casenum;
    cin >> casenum;
    while (casenum--)
    {
        int n;
        static char map[mapsize][mapsize];
        cin >> n;

        memset(map,' ', sizeof(map));

        draw(n, map, 0, 0);

        int size = (1 << (n + 2));

        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
                printf("%c",map[i][j]);
            printf("\n");
        }
//        putchar(10);
    }
    return 0;
}

分析:

以前的分型是从一个小图形为基础即从1(++)开始,这道题直接从n(--)开始,把最大的图形打印出来,递归再把它的子图形打印出来。

刚开始只知道根分型法有关,不对呀,我操,根第一句话没关系呀,能从大图形打印出小图形,就能从小图形打印出大图形。

智商-100。

你可能感兴趣的:(HRBUST 2085 囧 分型法)