HDUOJ 6708 Windows Of CCPC(模拟)


solution:最开始是4个字符左下角那个和其余3个不一样,用最初的可以拼成第2个,把第2个分成4部分,左下角和第一个相反,也就是P变为C,C变为P,其余相同。

#include <bits/stdc++.h>

using namespace std;

char s[1025][1025];

void f(int k) {
    if(s[(int)pow(2,k-1)][(int)pow(2,k-1)]==0) {
        f(k-1);
    }
    for(int i=1;i<=(int)pow(2,k-1);i++) {
        for(int j=(int)pow(2,k-1)+1;j<=(int)pow(2,k);j++) {
            s[i][j]=s[i][j-(int)pow(2,k-1)];
        }
    }
    for(int i=(int)pow(2,k-1)+1;i<=(int)pow(2,k);i++) {
        for(int j=1;j<=(int)pow(2,k-1);j++) {
            if(s[i-(int)pow(2,k-1)][j]=='P') {
                s[i][j]='C';
            }
            else {
                s[i][j]='P';
            }
        }
    }
    for(int i=(int)pow(2,k-1)+1;i<=(int)pow(2,k);i++) {
        for(int j=(int)pow(2,k-1)+1;j<=(int)pow(2,k);j++) {
            s[i][j]=s[i-(int)pow(2,k-1)][j-(int)pow(2,k-1)];
        }
    }
}

int main() {
    int t;
    cin>>t;
    for(int i=0;i<=1025;i++) {
        for(int j=0;j<=1025;j++) {
            s[i][j]=0;
        }
    }
    s[1][1]='C';
    s[1][2]='C';
    s[2][1]='P';
    s[2][2]='C';
    f(10);
    while(t--) {
        int k;
        cin>>k;
        for(int i=1;i<=(int)pow(2,k);i++) {
            for(int j=1;j<=(int)pow(2,k);j++) {
                cout<<s[i][j];
            }
            cout<<endl;
        }
    }
    return 0;
}
全部评论

相关推荐

03-24 16:56
已编辑
肇庆学院 后端
一天代码十万三:你看看人家进大厂的简历就知道了,你这个学历得acm+大厂实习+熟悉底层+运气很好 才有可能进某个大厂,因为大部分是直接卡学历的
投递快手等公司10个岗位
点赞 评论 收藏
分享
牛客464620405号:随便投,随便找,中国经过40多年的改革开放,人才缺口和职位空缺是巨大的,中国现在属于遍地黄金的年代,属于90后和00大机遇的时代
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务