【洛谷习题】南蛮图腾
生活随笔
收集整理的這篇文章主要介紹了
【洛谷习题】南蛮图腾
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接: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('\n'); 27 } 28 return 0; 29 } AC代碼?
轉載于:https://www.cnblogs.com/Mr94Kevin/p/9762972.html
總結
以上是生活随笔為你收集整理的【洛谷习题】南蛮图腾的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组 this.setData快捷赋值
- 下一篇: bzoj4998: 星球联盟