题号:NC214320
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
小

说自己很喜欢跑步。
小

把小

跑步的地方抽象成一个

行

列的平面矩形,其中左上角为点
)
,右下角为点
)
。对于每一个点
)
,都有一个值

,

表示该点为墙,

表示该点可以通过;一共有

个点是墙,即

。特别地,边界上的点

满足

或

或

或

的点
)
)
也视作墙,但
不计入
。在地图上能且只能朝垂直和水平四个方向跑动。但是小

很呆,总是迷路,因此一般只会沿一个方向跑动,当且仅当她撞墙时,她会改变方向(向后,向左或向右)跑动。
开始时小

站在点
)
。由于过多的撞墙会使得小

变得更呆,可她又是如此热爱跑步,所以现在,小

发出了

次
各自独立的询问,对于第

次询问,他想知道小

以
)
为起点,最多能撞墙

次时,最多能跑过多少个点。
注意,
同一个点可以重复计数,起点也计数。在起点时可以向任意方向跑动。撞墙是指在当前点,
若再沿原先方向跑动

步,所在点为墙;特殊地,若她在满足上述条件的点结束跑步,则不视为撞墙。
输入描述:
输入共
行。
第一行包含
个正整数
和
个非负整数
。
接下来
行,每行包含
个非负整数,其中第
行第
个数表示
。
接下来
行,第
行包含一个非负整数
。
输出描述:
输出共
行,第
行包含一个正整数,表示对于第
次询问,小
最多能跑过的点数。
示例1
输入
复制
5 5 1 1 1 10
0 0 1 0 1
1 0 0 0 1
0 1 0 0 1
1 0 0 0 1
1 1 0 0 0
3
说明
。
示例2
输入
复制
5 5 1 3 1 10
0 0 1 0 1
1 0 0 0 1
0 1 0 0 1
1 0 0 0 1
1 1 0 0 0
10
说明
很遗憾,但小
不能跑。注意,在同一点内多次改变方向时,该点并不会被重复计数,因为小
不能用转圈代替跑步。