#E. 城镇地图

    传统题 1000ms 128MiB

城镇地图

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

说明

乐乐管理了一个巨大的城镇 。城镇可以看作是一个 nnmm 列的矩形 ,其中 ,城镇的中心位于 第 x0x_0 行 、第 y0y_0 列 。城镇中每个格子都用一个字符来表示 ,城镇地图的绘制方法如下:

  • 首先在城镇的中心画上一个加号 +。
  • 给穿过城镇中心的一行画上减号 -。(城镇中心位置不画) · 给穿过城镇中心的一列画上竖线 |。(城镇中心位置不画)
  • 从城镇中心出发 ,分别给斜左上方 、斜右上方 、斜右下方 、斜左下方画上 \、/、\、/ 字 符 ,一直绘制直到到达地图边界。
  • 以上横竖斜线将城镇分割为八个区域 ,按照顺时针方向给每个区域分别填上 A-H 八个字母。

例如 ,对于以下 n=8,m=16n = 8, m = 16 的例子,假设城镇的中心位于 (4,84,8) ,绘制的城镇地图如下:

GGGG\HH|AA/BBBBB
GGGGG\H|A/BBBBBB
GGGGGG\|/BBBBBBB
-------+--------
FFFFFF/|\CCCCCCC
FFFFF/E|D\CCCCCC
FFFF/EE|DD\CCCCC
FFF/EEE|DDD\CCCC

对于 n=7,m=4n = 7, m = 4 ,城镇中⼼位于 (5,35, 3) ,绘制的城镇地图如下:

HH|A
HH|A
\H|A
G\\|/
--+-
F/|
/E|D

如果 n=2,m=1n = 2, m = 1 ,城镇中⼼位于 (2,12, 1) ,绘制的城镇地图如下: |

城镇实在是太⼤了 ,居民们不得不依靠 GPSGPS 定位 。 因此 ,居民们希望你帮助他们开发⼀款地 图应⽤ ,根据 GPSGPS 位置 (第 xx ⾏第 yy 列) 绘制出以 (x,yx, y) 为中⼼ ,⼤⼩为 5×55 × 5 的城镇地图。

输入格式

输⼊第⼀⾏四个整数 n,m,x0,y0n, m, x_0 , y_0 ,分别代表城镇区域的⾼度 (nn ⾏) 、宽度 (mm 列) 和城镇中⼼的 位置 (x0,y0x_0 , y_0 ) 。城镇中⼼的位置满⾜ 1x0n,1y0m1 ≤ x_0 ≤ n, 1 ≤ y_0 ≤ m

输⼊第⼆⾏⼀个整数 QQ , 代表绘制地图的请求数量 。 接下来 QQ ⾏ , 每⾏两个整数 x,y(1xn,1ym)x, y (1 ≤ x ≤ n, 1 ≤ y ≤ m) ,表⽰⼀个请求 ,绘制出以第 xx ⾏第 yy 列为中⼼的 5×55 × 5 地图。

输出格式

为每个请求 x,yx, y 输出 55 ⾏ ,每⾏ 55 个字符 ,为绘制的地图 。超出城镇边界的部分画井号</strong> “#” 。

为了更好的视觉效果 ,你可以选择在每个请求之后输出⼀个额外的空⾏ (是否输出额外空行不影响正确性</strong>)。

样例

6 15 4 8
2
1 1
2 7
#####
#####
##GGG
##GGG
##GGG

\HH|A G\H|A GG|/ ---+-

</p>

提示

  • 对于 60%60\% 的数据 ,满⾜ n,m1,000n, m ≤ 1, 000
  • 对于 100%100\% 的数据 ,满⾜ 1n,m1,000,0001 ≤ n, m ≤ 1, 000, 000
  • 对于 100%100\% 的数据 ,满⾜ Q1,000Q ≤ 1, 000。 注意: char map[1000000][1000000] 将会占⽤约 1TB (1024GB) 的内存 。这远超过了我们可⽤的内存。 在 C/C++ 中 ,⼀个反斜杠字符 \ 在字符串或字符常量中 ,⽤两个反斜杠表⽰ ,例如:
char ch = '\\ ';  
char s [] = "\\"; // strlen(s) == 1
std::string s = "\\"; // s.length() == 1

20240601训练

未认领
状态
已结束
题目
6
开始时间
2024-6-1 0:00
截止时间
2024-6-1 23:59
可延期
24 小时