HRBUST 2085 囧 分型法

来源:互联网 发布:网络文化传媒公司 编辑:程序博客网 时间:2024/06/05 12:01

题目: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。

1 0
原创粉丝点击