[TIOJ]1994. 冰塊線

由4*4的解答,可以發現解出左上U的排序,及可復制其他三格
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2049;
int a[MAXN][MAXN];

void div(int n,bool type) { 
    if(n==0) return;
    int add=n>>1;
    int addadd=add*add;
    div(add,!type);
    if(type==0) {
        for(int i=0;i<add;++i)
            for(int j=0;j<add;++j) {
                a[j][i+add]=a[i][j]+addadd;
                a[j+add][i+add]=a[i][j]+(addadd<<1);
                a[n-i-1][add-j-1]=a[i][j]+addadd*3;
            }
    }
    else if(type==1) {
        for(int i=0;i<add;++i)
            for(int j=0;j<add;++j) {
                a[j+add][i]=a[i][j]+addadd;
                a[j+add][i+add]=a[i][j]+(addadd<<1);
                a[add-i-1][n-j-1]=a[i][j]+addadd*3;
                
            }
    }
    
    
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    a[0][0]=0;
    int n;
    cin>>n;
    n=(1<<(n));
    div(n,bool(0));
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++) {
            cout<<a[j][i]<<" \n"[j==n-1];
        }
    
}

留言