chess
暂无测试数据。
Background
回忆落空了残年。
Description
pig 在下象棋的时候特别喜欢用马,他总是计算着自己的马还需要几步才能吃掉对方的帅,以及方案数的个数,当然 pig 很笨,所以他只能求助于你。
我们假设在 m*n 的棋盘上, pig 的马只能走 1*2 的格点,他的马一开始在 st,对方的帅在 ed。当然,我们不能忽视友军和敌军,所以如果落点被友军占有,那么就不能飞过去了;如果落点被敌军占有,那么 pig 认为自己这一步赚了,所以不计入总步数。 为了简化问题,我们的马在飞的时候不受到敌军限制。
Format
Input
第一行两个数 m,n 表示棋盘大小为 m * n。
接下来 m 行,每行 n 个数字, 0 表示格子为空,1 表示格子上有敌军,2 表示格子上有友军,3 表示马的位置,4 表示敌方的帅。
Output
两行。
第一行:一个数,最少情况下实际走的步数。如果没有方案存在,输出 -1。
第二行:一个数,达到最小值的方案总数,如果两个方案走的 空格 不同则认为这两个方案不同(详见样例)。这个数保证不超过内设 64 位整数(long long/int64)的大小。如果第一行是-1,不要输出此行。
Sample 1
Input
4 5
0 0 0 0 1
0 0 3 0 0
0 0 0 4 0
0 1 0 0 0
Output
0
1
Sample 2
Input
4 5
1 0 0 0 0
3 0 0 0 0
0 0 2 0 0
0 0 0 4 0
Output
2
3
Explanation to Sample 2
一共有 3 种方案。 X 代表实际走的步数
1 0 0 0 0 | 1 0 X 0 0 | 1 0 X 0 0
3 0 X 0 0 | 3 0 0 0 0 | 3 0 0 0 X
0 0 2 0 0 | 0 X 2 0 0 | 0 0 2 0 0
0 X 0 4 0 | 0 0 0 4 0 | 0 0 0 4 0
Limitation
对于 30%的数据,m,n<=5。
对于 100%的数据, m,n<=50。
1s, 256000KiB for each test case.
Hint
落在敌军的位置敌军就会被吃掉。不要想在两个位置来回跳跃。
Source
CDQZ TEST