昨天做了,为了抢夜宵就没写
自己做了半天,感觉及其恶心,就去看了题解,发现了一种及其巧妙的写法。
这种写法的原理就是按照2的整数幂次将一共 $2^{n}$ 行分成 $n$ 组来操作,操作就是把之前的图形左右各复制一个即可,只是要注意要在前后加上空格。
int n,m;
string ans[1100];
inline void work(int x)
{
int mx=x*2;
for (int i=x;i<mx;i++) ans[i]=ans[i-x]+ans[i-x];
for (int i=0;i<x;i++)
{
ans[i].insert(0,x,' ');
ans[i].insert(ans[i].length(),x,' ');
}
}
int main()
{
n=read(); m=1<<n;
ans[0]=" /\\ ";
ans[1]="/__\\";
for (int i=1;i<n;i++) work(1<<i);
for (int i=0;i<m;i++) cout<<ans[i]<<"\n";
return 0;
}