城镇地图
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.
说明
乐乐管理了一个巨大的城镇 。城镇可以看作是一个 行 列的矩形 ,其中 ,城镇的中心位于 第 行 、第 列 。城镇中每个格子都用一个字符来表示 ,城镇地图的绘制方法如下:
- 首先在城镇的中心画上一个加号 +。
- 给穿过城镇中心的一行画上减号 -。(城镇中心位置不画) · 给穿过城镇中心的一列画上竖线 |。(城镇中心位置不画)
- 从城镇中心出发 ,分别给斜左上方 、斜右上方 、斜右下方 、斜左下方画上 \、/、\、/ 字 符 ,一直绘制直到到达地图边界。
- 以上横竖斜线将城镇分割为八个区域 ,按照顺时针方向给每个区域分别填上 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
如果 ,城镇中⼼位于 () ,绘制的城镇地图如下: |
城镇实在是太⼤了 ,居民们不得不依靠 定位 。 因此 ,居民们希望你帮助他们开发⼀款地 图应⽤ ,根据 位置 (第 ⾏第 列) 绘制出以 () 为中⼼ ,⼤⼩为 的城镇地图。
输入格式
输⼊第⼀⾏四个整数 ,分别代表城镇区域的⾼度 ( ⾏) 、宽度 ( 列) 和城镇中⼼的 位置 ( ) 。城镇中⼼的位置满⾜ 。
输⼊第⼆⾏⼀个整数 , 代表绘制地图的请求数量 。 接下来 ⾏ , 每⾏两个整数 ,表⽰⼀个请求 ,绘制出以第 ⾏第 列为中⼼的 地图。
输出格式
为每个请求 输出 ⾏ ,每⾏ 个字符 ,为绘制的地图 。超出城镇边界的部分画井号</strong> “#” 。
为了更好的视觉效果 ,你可以选择在每个请求之后输出⼀个额外的空⾏ (是否输出额外空行不影响正确性</strong>)。
样例
6 15 4 8
2
1 1
2 7
#####
#####
##GGG
##GGG
##GGG
\HH|A
G\H|A
GG|/
---+-
</p>
提示
- 对于 的数据 ,满⾜ 。
- 对于 的数据 ,满⾜ 。
- 对于 的数据 ,满⾜ 。 注意: char map[1000000][1000000] 将会占⽤约 1TB (1024GB) 的内存 。这远超过了我们可⽤的内存。 在 C/C++ 中 ,⼀个反斜杠字符 \ 在字符串或字符常量中 ,⽤两个反斜杠表⽰ ,例如:
char ch = '\\ ';
char s [] = "\\"; // strlen(s) == 1
std::string s = "\\"; // s.length() == 1