洛谷1498 南蛮图腾

@Llf0703  November 28, 2018

昨天做了,为了抢夜宵就没写

自己做了半天,感觉及其恶心,就去看了题解,发现了一种及其巧妙的写法。

这种写法的原理就是按照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;
}

添加新评论