1. 程式人生 > >洛古【P1498】:南蠻圖騰(分治演算法)

洛古【P1498】:南蠻圖騰(分治演算法)

傳送門

題目描述就不用看了,直接上樣例就行:

輸入樣例#1: 
2
輸出樣例#1:
   /\
  /__\
 /\  /\
/__\/__\
輸入樣例#2:
3
輸出樣例#2:
       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

嗯,一個赤裸裸的分形圖。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int
n; 4 char a[2050][2050]; 5 void solve(int m1,int m2,int h1,int h2) 6 { 7 if(m2-m1==3) 8 { 9 a[h1][m1+1]=a[h2][m1]='/'; 10 a[h1][m2-1]=a[h2][m2]='\\'; 11 a[h2][m1+1]=a[h2][m1+2]='_'; 12 return; 13 } 14 else{ 15 solve(m1,(m1+m2)/2,(h1+h2)/2+1,h2);
16 solve((m1+m2)/2+1,m2,(h1+h2)/2+1,h2); 17 solve(m1+(m2-m1+1)/4,m2-(m2-m1+1)/4,h1,(h1+h2)/2); 18 } 19 20 } 21 int main() 22 { 23 cin>>n; 24 int m=pow(2,n+1),h=pow(2,n); 25 solve(1,m,1,h); 26 for(int i=1;i<=h;i++) 27 { 28 for(int j=1;j<=m;j++)
29 { 30 if(a[i][j]==0)printf(" "); 31 else printf("%c",a[i][j]); 32 } 33 puts(""); 34 } 35 }