zoukankan      html  css  js  c++  java
  • 洛谷 P1911 L国的战斗之排兵布阵

    题目背景

    L国即将与I国发动战争!!

    题目描述

    L国的指挥官想让他的每一个军营都呈现出国徽形——“L”形(方向无所谓)。当然,他的指挥营除外(这叫做个性),他想不出该怎么排,就这样,这任务又变成了你的……

    输入输出格式

    输入格式:

     

    一行三个数:n、x、y表示军营大小为2^N,指挥营在(x,y)的位置上。

     

    输出格式:

     

    2^N行,每行2^N个数,表示军营号(按先行后列顺序)指挥营用0表示。

     

    输入输出样例

    输入样例#1: 复制
    4 1 3
    输出样例#1: 复制
    1 1 0 2 3 3 4 4 5 5 6 6 7 7 8 8
    1 9 2 2 3 10 10 4 5 11 11 6 7 12 12 8
    13 9 9 14 15 15 10 16 17 11 18 18 19 19 12 20
    13 13 14 14 21 15 16 16 17 17 18 22 22 19 20 20
    23 23 24 21 21 25 26 26 27 27 28 28 22 29 30 30
    23 31 24 24 25 25 32 26 27 33 33 28 29 29 34 30
    35 31 31 36 37 32 32 38 39 39 33 40 41 34 34 42
    35 35 36 36 37 37 38 38 43 39 40 40 41 41 42 42
    44 44 45 45 46 46 47 43 43 48 49 49 50 50 51 51
    44 52 52 45 46 53 47 47 48 48 54 49 50 55 55 51
    56 52 57 57 58 53 53 59 60 54 54 61 62 62 55 63
    56 56 57 64 58 58 59 59 60 60 61 61 65 62 63 63
    66 66 67 64 64 68 69 69 70 70 71 65 65 72 73 73
    66 74 67 67 68 68 75 69 70 76 71 71 72 72 77 73
    78 74 74 79 80 75 75 81 82 76 76 83 84 77 77 85
    78 78 79 79 80 80 81 81 82 82 83 83 84 84 85 85
    

    说明

    数据范围:

    1≤n≤10, 1≤x,y≤2^n

    思路:搜索。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 1050
    using namespace std;
    int s=1,cnt=1;
    int n,dx,dy,cc,flag;
    int map[MAXN][MAXN];
    bool visit[MAXN][MAXN];
    void ddf(int a,int b,int c,int d,int e){
        if(c==1) return;
        c/=2;
        if(d<a+c&&e<b+c){
            ddf(a,b,c,d,e);
            ddf(a,b+c,c,a+c-1,b+c);
            ddf(a+c,b,c,a+c,b+c-1);
            ddf(a+c,b+c,c,a+c,b+c); 
            cc++;
            map[a+c][b+c]=cc;
            map[a+c][b+c-1]=cc;
            map[a+c-1][b+c]=cc;
        }
        if(d<a+c&&e>=b+c){
            ddf(a,b,c,a+c-1,b+c-1);
            ddf(a,b+c,c,d,e);
            ddf(a+c,b,c,a+c,b+c-1);
            ddf(a+c,b+c,c,a+c,b+c);
            cc++;
            map[a+c][b+c]=cc;
            map[a+c][b+c-1]=cc;
            map[a+c-1][b+c-1]=cc;
        }
        if(d>=a+c&&e<b+c){
            ddf(a,b,c,a+c-1,b+c-1);
            ddf(a,b+c,c,a+c-1,b+c);    
            ddf(a+c,b,c,d,e);
            ddf(a+c,b+c,c,a+c,b+c);
            cc++;
            map[a+c-1][b+c-1]=cc;
            map[a+c-1][b+c]=cc;
            map[a+c][b+c]=cc;
        }
        if(d>=a+c&&e>=b+c){
            ddf(a,b,c,a+c-1,b+c-1);
            ddf(a,b+c,c,a+c-1,b+c);
            ddf(a+c,b,c,a+c,b+c-1);
            ddf(a+c,b+c,c,d,e);
            cc++;
            map[a+c-1][b+c-1]=cc;
            map[a+c][b+c-1]=cc;
            map[a+c-1][b+c]=cc;
        }
    }
    void dnum(int x,int y){
        map[x][y]=cnt;
        visit[x][y]=1;
        if(!visit[x+1][y]&&map[x+1][y]==flag)    dnum(x+1,y);
        if(!visit[x-1][y]&&map[x-1][y]==flag)    dnum(x-1,y);
        if(!visit[x][y+1]&&map[x][y+1]==flag)    dnum(x,y+1);
        if(!visit[x][y-1]&&map[x][y-1]==flag)    dnum(x,y-1);
    }
    int main(){
        scanf("%d%d%d",&n,&dx,&dy);
        while(n){ s*=2;n--; }
        ddf(1,1,s,dx,dy);
        visit[dx][dy]=1;
        for(int i=1;i<=s;i++){
            for(int j=1;j<=s;j++){
                if(visit[i][j]){
                    printf("%d ",map[i][j]);
                    continue;
                }
                flag=map[i][j];
                dnum(i,j);
                cnt++;
                printf("%d ",map[i][j]);
            }
            cout<<endl;
        }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    【Java123】javapoet代码生成代码工具
    【Python123】OptionParser初使用
    【Spring123】JdbcTemplate初使用 以及 ORA-01858: a non-numeric character was found where a numeric was expected, ORA-00911: invalid character解决
    【Java123】解决javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    git常用命令
    在虚拟机上搭建自己的 git 服务器并创建 git 仓库
    git用法
    Golang gRPC框架3-自签证书验证
    go _nsq
    mysql的备份和恢复
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7912247.html
Copyright © 2011-2022 走看看