HDU:6708-Windows Of CCPC

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6708

解题心得:就是一个矩阵拼接的模拟,预处理出来之后直接输出就行了。



#include 
using namespace std;
typedef long long ll;
const int maxn = 1050;

int n, t;

bool matrix[12][maxn][maxn];

void pre_deal() {
     
    matrix[1][2][1] = true;

    for(int i=2;i<=10;i++) {
     
        for(int j=1;j<=(1<<(i-1));j++) {
     
            for(int k=1;k<=(1<<(i-1));k++) {
     
                matrix[i][j][k] = matrix[i-1][j][k];
            }
        }

        for(int j=1;j<=(1<<(i-1));j++) {
     
            for(int k=1+(1<<(i-1));k<=(1<<i);k++) {
     
                matrix[i][j][k] = matrix[i-1][j][k-(1<<(i-1))];
            }
        }

        for(int j=1+(1<<(i-1));j<=(1<<i);j++) {
     
            for(int k=1;k<=(1<<(i-1));k++) {
     
                matrix[i][j][k] = (!matrix[i-1][j-(1<<(i-1))][k]);
            }
        }

        for(int j=1+(1<<(i-1));j<=(1<<i);j++) {
     
            for(int k=1+(1<<(i-1));k<=(1<<i);k++) {
     
                matrix[i][j][k] = matrix[i-1][j-(1<<(i-1))][k-(1<<(i-1))];
            }
        }
    }
}

int main() {
     
//    freopen("1.in.txt", "r", stdin);
    scanf("%d", &t);
    pre_deal();
    while(t--) {
     
        scanf("%d", &n);

        for(int i=1;i<=(1<<n);i++) {
     
            for(int j=1;j<=(1<<n);j++) {
     
                printf("%c", matrix[n][i][j] ? 'P' : 'C');
            }
            printf("\n");
        }
    }
    return 0;
}

你可能感兴趣的:(水题-模拟,模拟)