luogu 1498 南蛮图腾

题目

题目描述

 

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

输入格式

 

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

输出格式

 

这个大小的图腾

输入输出样例

 

输入 #1

2

输出 #1

   /
  /__
 /  /
/__/__

输入 #2

3

输出 #2

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

分析

好像我用的不是分治诶 >_<

不过题解里有人用分治。注意字符的细节

(一道普及组的题还没能一次过)

代码

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int n,MAXN;
 6 char a[1 << 12][1 << 12];
 7 
 8 int Copy(int x,int y,int len){
 9     for(int i = x + len;i < x + len + len; ++ i)
10         for(int j = y - len;j < y + len; ++ j){
11             a[i][j] = a[i - len][j + len];//i,j不是x,y 
12         }
13 
14     for(int i = x + len;i < x + len + len; ++ i)
15         for(int j = y + len;j < y + len + len + len; ++ j){
16             a[i][j] = a[i - len][j - len];
17         }
18 }
19 
20 int main(){
21 //    freopen("2.txt","r",stdin);
22 //    freopen("1.txt","w",stdout);
23 //注意注销文件
24 //还是对拍比较靠谱
25 //肉眼看不出来 
26     scanf("%d",&n);
27     
28     for(int i = 0;i <= (1<<n) + 5;++i) 
29         for(int j = 0;j <= (1<<(n + 1)) + 5;++j)
30             a[i][j] = ' '; //高(1<<n),宽(1<<(n + 1))
31     
32     MAXN = ((1 << n));
33     a[1][MAXN] = '/';
34     a[1][MAXN + 1] = '\';
35     a[2][MAXN] = '_'; 
36     a[2][MAXN + 1] = '_'; 
37     a[2][MAXN - 1] = '/'; 
38     a[2][MAXN + 2] = '\';//一个斜杠是转义字符 
39     
40     for(int i = 1;i < n; ++ i){
41         int len = (1 << i);
42         Copy(1,MAXN - len + 1,len);
43     }
44     int end = MAXN + 1;
45     for(int i = 1;i <= MAXN ;++ i){
46         end ++ ;
47         for(int j = 1;j <= end ; ++ j){
48             putchar(a[i][j]);
49         }
50         putchar('
');
51     }
52     
53     return 0;
54 }
View Code
非做顽石不可,哪管他敬仰暗唾
原文地址:https://www.cnblogs.com/Mandy-H-Y/p/11392529.html