【洛谷P5461】赦免戰俘【分形】

題目大意:

題目鏈接:https://www.luogu.org/problemnew/show/P5461
一個2n×2n2^n\times 2^n的正方形,每次從中間將這個正方形分爲4個小正方形,其中左上角的小正方形全部爲0,另外三個小正方形按照同樣的方式繼續分割。輸出這個正方形。


思路:

這是洛谷7月月賽的T1簽到題。其他題目看都沒看
一道非常基礎的分形。每次簡單維護一下就可以了。具體方法應該不用說了吧。。。
沒有打遞歸,直接O(n2) forO(n^2)\ for枚舉的,打的很醜。
但是比賽時只有50pts50pts,賽後重交源代碼就AC了,後來看kkk說是什麼奇怪的bug,算了就劃一下水就不管了。
寫了一大堆廢話↑


代碼:

#include  <cstdio>
using namespace std;

const int N=1100;
int n,a[N][N];

int main()
{
	//前方巨醜
    scanf("%d",&n);
    a[1<<n][1<<n]=a[1<<n][(1<<n)-1]=a[(1<<n)-1][1<<n]=1;
    for (int k=2;k<=n;k++)
    {
        for (int i=(1<<n)-(1<<k)+1;i<=(1<<n)-(1<<k-1);i++)
            for (int j=n-(1<<k-1)+1;j<=(1<<n);j++)
                a[i][j]=a[i+(1<<k-1)][j];
        for (int i=(1<<n)-(1<<k-1)+1;i<=(1<<n);i++)
            for (int j=(1<<n)-(1<<k)+1;j<=(1<<n)-(1<<k-1);j++)
                a[i][j]=a[i][j+(1<<k-1)];
    }
    for (int i=1;i<=(1<<n);i++,putchar(10))
        for (int j=1;j<=(1<<n);j++)
            printf("%d ",a[i][j]);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章