洛谷 P1911 L国的战斗之排兵布阵
2024-10-01 18:44:25
题目背景
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=,cnt=;
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==) return;
c/=;
if(d<a+c&&e<b+c){
ddf(a,b,c,d,e);
ddf(a,b+c,c,a+c-,b+c);
ddf(a+c,b,c,a+c,b+c-);
ddf(a+c,b+c,c,a+c,b+c);
cc++;
map[a+c][b+c]=cc;
map[a+c][b+c-]=cc;
map[a+c-][b+c]=cc;
}
if(d<a+c&&e>=b+c){
ddf(a,b,c,a+c-,b+c-);
ddf(a,b+c,c,d,e);
ddf(a+c,b,c,a+c,b+c-);
ddf(a+c,b+c,c,a+c,b+c);
cc++;
map[a+c][b+c]=cc;
map[a+c][b+c-]=cc;
map[a+c-][b+c-]=cc;
}
if(d>=a+c&&e<b+c){
ddf(a,b,c,a+c-,b+c-);
ddf(a,b+c,c,a+c-,b+c);
ddf(a+c,b,c,d,e);
ddf(a+c,b+c,c,a+c,b+c);
cc++;
map[a+c-][b+c-]=cc;
map[a+c-][b+c]=cc;
map[a+c][b+c]=cc;
}
if(d>=a+c&&e>=b+c){
ddf(a,b,c,a+c-,b+c-);
ddf(a,b+c,c,a+c-,b+c);
ddf(a+c,b,c,a+c,b+c-);
ddf(a+c,b+c,c,d,e);
cc++;
map[a+c-][b+c-]=cc;
map[a+c][b+c-]=cc;
map[a+c-][b+c]=cc;
}
}
void dnum(int x,int y){
map[x][y]=cnt;
visit[x][y]=;
if(!visit[x+][y]&&map[x+][y]==flag) dnum(x+,y);
if(!visit[x-][y]&&map[x-][y]==flag) dnum(x-,y);
if(!visit[x][y+]&&map[x][y+]==flag) dnum(x,y+);
if(!visit[x][y-]&&map[x][y-]==flag) dnum(x,y-);
}
int main(){
scanf("%d%d%d",&n,&dx,&dy);
while(n){ s*=;n--; }
ddf(,,s,dx,dy);
visit[dx][dy]=;
for(int i=;i<=s;i++){
for(int j=;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;
}
}
最新文章
- webpack入门之简单例子跑起来
- etl结合java的例子
- 在Abp中执行sql语句
- factory工厂模式之工厂方法FactoryMethod
- ListView防止滑动变色的小技巧
- 从一个SVN下载的导入另一个SVN里面
- Android手机APN设置(中国移动 联通3G 电信天翼),解决不能上网的问题
- 解决DEDECMS Call to undefined function dede_htmlspecialchars()
- Docker教程:docker的概念及安装
- 【Vbox】centos虚拟机安装usb网卡驱动
- Object类的equals()方法总结
- spring boot 监听器实例
- 移动端根据不同DPR加载大小不同的图片
- Codeforces 362D Fools and Foolproof Roads
- spring JdbcTemplate数据库
- python下载网页视频
- sql server: Graphs, Trees, Hierarchies and Recursive Queries
- C# 无法识别的消息版本。
- 论Java的重要性
- 奋斗史-IT女生是怎样炼成的
热门文章
- 洛谷3388 【模板】割点 tarjan算法
- 监控memcached服务
- Jupyter Notebook 常用的快捷键
- maven中使用mybatis
- 试图切换控制addChildViewController、_transitionFromViewController
- [React] Implement a React Context Provider
- [B cannot be cast to java.lang.String
- 开源企业IM-免费企业即时通讯-ENTBOOST V0.9版本号公布
- Bootstrapbutton组
- HDU 1730 Northcott Game