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