#NJ2024E. 城镇地图
城镇地图
E - 城镇地图
时空限制
- CPU占用时长: 1秒
- 内存使用限制: 128MB
题目描述
乐乐管理了一个巨大的城镇。城镇可以看作是一个 行 列的矩形,其中,城镇的中心位于第 行、第 列。城镇中每个格子都用一个字符来表示,城镇地图的绘制方法如下:
- 首先在城镇的中心画上一个加号
+。 - 给穿过城镇中心的一行画上减号
-。(城镇中心位置不画) - 给穿过城镇中心的一列画上竖线
|。(城镇中心位置不画) - 从城镇中心出发,分别给斜左上方、斜右上方、斜右下方、斜左下方画上
\、/、\、/字符,一直绘制直到到达地图边界。 - 以上横竖斜线将城镇分割为八个区域,按照顺时针方向给每个区域分别填上 A-H 八个字母,如下图所示:

例如,对于以下 的例子,假设城镇的中心位于 ,绘制的城镇地图如下:
GGGG\HH|AA/BBBBB
GGGGG\H|A/BBBBBB
GGGGGG\|/BBBBBBB
-------+--------
FFFFFF/|\CCCCCCC
FFFFF/E|D\CCCCCC
FFFF/EE|DD\CCCCC
FFF/EEE|DDD\CCCC
对于 ,城镇中心位于 ,绘制的城镇地图如下:
HH|A
HH|A
\H|A
G\|/
--+-
F/|\
/E|D
如果 ,城镇中心位于 ,绘制的城镇地图如下:
|
+
城镇实在是太大了,居民们不得不依靠 定位。因此,居民们希望你帮助他们开发一款地图应用,根据 位置 (第 行第 列) 绘制出以 为中心、大小为 的城镇地图。
输入格式
输入第一行四个整数 ,分别代表城镇区域的高度 ( 行)、宽度 ( 列) 和城镇中心的位置 。城镇中心的位置满足 。
输入第二行一个整数 ,代表绘制地图的请求数量。接下来 行,每行两个整数 (),表示一个请求,绘制出以第 行第 列为中心的 地图。
输出格式
为每个请求 输出 行,每行 个字符,为绘制的地图。超出城镇边界的部分画井号 #。
为了更好的视觉效果,你可以选择在每个请求之后输出一个额外的空行(是否输出额外空行不影响正确性)。
输入输出样例
样例 1
输入:
6 15 4 8
2
1 1
2 7
输出:
#####
#####
##GGG
##GGG
##GGG
#####
\HH|A
G\H|A
GG\|/
---+-
数据范围与提示
- 对于 的数据,满足 。
- 对于 的数据,满足 。
- 对于 的数据,满足 。
注意:
char map[1000000][1000000] 将会占用约 1TB (1024GB) 的内存。这远超过了我们可用的内存。
在 C/C++ 中,一个反斜杠字符 \ 在字符串或字符常量中,用两个反斜杠表示,例如:
char ch = '\\';
char s[] = "\\"; // strlen(s) == 1
std::string s = "\\"; // s.length() == 1