#P6945. [ICPC 2018 WF] Getting a Jump on Crime

[ICPC 2018 WF] Getting a Jump on Crime

Description

你的朋友罗宾(Robin)是一位超级英雄。当你第一次发现这个事时,你认为“每个人都需要有爱好,这个看起来比收集邮票有意思多了”,但是现在你十分感谢那些在你的家乡胡作非为的人。

每个晚上, 罗宾(Robin)用在房顶上跳跃的方式巡逻整座城市,并且看下面发生了什么。自然,超级英雄需要立即应对危机,所以罗宾(Robin)寻求你的帮助,帮他找出如何迅速走遍你的家乡。

你的家乡建立在一个方形的格子上,其中每个区块有 w×ww\times w 米。每个区块是一个独立的建筑,建筑有可能有不同的高度,为了从一个建筑到另一个(不一定相邻的)建筑,罗宾(Robin)从第一个房屋屋顶的中间跳到第二个房屋屋顶的中间。不能在空中改变方向,但可以选择起飞的角度。

当然,罗宾(Robin)不想撞到任何一个建筑。一些碰撞很难对超级英雄造成伤害,但是当有人击穿房屋主人的窗户时,他们容易感到生气。你向罗宾(Robin)解释物理学:“你的每次跳都有一个初速度vv,可以被分解成一个向前的水平分力vdv_d和一个向上的竖直分力vhv_h,且vd2+vh2=v2v_{d}^{2} + v_{h}^{2} = v^{2}.当你行动时,你的水平分力保持不变(vdt=vd),(v_{dt} = v_{d}),,但是竖直分力受到重力的影响(vh(t)=vhtg)(v_{h}(t) = v_{h} − t · g),设在你的家乡重力加速度g=9.80665g=9.80665。自然,你的斗篷可以让你忽略空气阻力的影响。这可以让你确定你的飞行路线和……”这是你注意到罗宾(Robin)已经睡着了-少一点数学,多一点超级英雄!

所以现在轮到你了:已经给出城市的布局和罗宾(Robin)秘密藏身处的位置,你需要确定罗宾(Robin)能到达哪些屋顶并给出最少跳跃次数。

请注意,如果罗宾(Robin)的跳跃经过一栋建筑的角落(四栋建筑交汇的地方),那么跳跃需要比所有四栋相邻建筑都高。

Input Format

输入的第一行包含六个整数dxd_x,dyd_y,ww,vv,lxl_x,lxl_x.这些代表了 dx×dyd_x\times d_y 的城市面积(单位:区块)(1dx,dy20)(1 \le d_{x}, d_{y} \le 20),每座建筑的宽度(1w103)(1 \le w \le 10^{3}),罗宾(Robin)的起跳速度(1v103)(1 \le v \le 10^{3})(单位:米每秒),和罗宾(Robin)藏身处的坐标(1xdx,1ydy).(1 \le ℓ_{x} \le d_{x}, 1 \le ℓ_{y} \le d_{y}).

第一行后面是对城市网格中建筑高度的描述。描述由dyd_y行组成,每个行包含dxd_{x}个非负整数。第j行包含建筑物(1,j),(2,j)(1 , j),(2 , j) , . . . ,(dx,j),(d_{x}, j) 的高度(单位:米)。高度最高不超过10310^3米。

Output Format

输出罗宾从秘密藏身处跳到每栋建筑屋顶所需的最小跳跃次数。如果无法到达建筑物的屋顶,则显示XX而不是跳跃次数。按输入文件中给定的顺序显示建筑,分为dyd_{y}行,每行包含dxd_{x}个值。

4 1 100 55 1 1
10 40 60 10

0 1 1 1

4 4 100 55 1 1
0 10 20 30
10 20 30 40
20 30 200 50
30 40 50 60

0 1 1 2
1 1 1 2
1 1 X 2
2 2 2 3