⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p2083.cpp

📁 大概POJ上50道比较难的题的代码
💻 CPP
字号:
#include <iostream>
using namespace std;
string f[8][2187];
int po[8];
int main(){
    po[0] = 1;
    for(int i = 1;i < 8;++i){
        po[i] = po[i-1] * 3;
        for(int j = 0;j < po[i];++j)
            f[i][j].resize(po[i],' ');
    }
    f[0][0] = "X";
    for(int i = 1;i < 8;++i){
        for(int j = 0;j < po[i];++j){
            if(j < po[i-1]){
                for(int k = 0;k < po[i-1] && k < f[i-1][j].size();++k)
                    f[i][j][k] = f[i-1][j][k];
                for(int k = 2*po[i-1];k < 3*po[i-1] && k-2*po[i-1] < f[i-1][j].size();++k)
                    f[i][j][k] = f[i-1][j][k-2*po[i-1]];
            }
            if(j >= po[i-1] && j < 2*po[i-1])
                for(int k = po[i-1];k < 2*po[i-1] && k-po[i-1] < f[i-1][j-po[i-1]].size();++k)
                    f[i][j][k] = f[i-1][j-po[i-1]][k-po[i-1]];
            if(j >= 2*po[i-1]){
                for(int k = 0;k < po[i-1] && k < f[i-1][j-2*po[i-1]].size();++k)
                    f[i][j][k] = f[i-1][j-2*po[i-1]][k];
                for(int k = 2*po[i-1];k < 3*po[i-1] && k-2*po[i-1] < f[i-1][j-2*po[i-1]].size();++k)
                    f[i][j][k] = f[i-1][j-2*po[i-1]][k-2*po[i-1]];
            }
            int k;
            for(k = f[i][j].size()-1;k >= 0 && f[i][j][k] == ' ';--k);
            f[i][j].erase(k+1,f[i][j].size()-k);
        }
    }
    int n;

    scanf("%d",&n);
    while(n != -1){
        for(int i = 0;i < po[n-1];++i)
            printf("%s\n",f[n-1][i].c_str());
        puts("-");
        scanf("%d",&n);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -