#apc001i. [apc001_i]Simple APSP Problem
[apc001_i]Simple APSP Problem
问题描述
给定一个 的网格。左上角的方块表示为 ,右下角的方块表示为 。
其中, 个方块 被涂黑,其余方块被涂白。
定义两个白色方块 和 之间的最短距离为从 出发,只经过白色方块,到达 的最少移动次数。每次移动可以向上、下、左或右移动一个方块。
由于总共有 个白色方块,因此选择其中两个白色方块的方式有 种。
对于每种选择,找到选定方块之间的最短距离,然后计算所有距离的和,模 。
约束条件
- 如果 ,则 或者 。
- 至少有一个白色方块。
- 对于每对白色方块 和 ,从 可以经过只有白色方块的路径到达 。
输入
输入以以下格式从标准输入中给出:
:
输出
输出最短距离的和,模 。
示例输入1
2 3
1
1 1
示例输出1
20
我们得到以下网格(.
表示白色方块,#
表示黑色方块)。
...
.#.
我们为每个白色方块分配如下字母。
ABC
D#E
然后,我们有:
- dist(A, B) =
- dist(A, C) =
- dist(A, D) =
- dist(A, E) =
- dist(B, C) =
- dist(B, D) =
- dist(B, E) =
- dist(C, D) =
- dist(C, E) =
- dist(D, E) =
其中 dist(A, B) 是 A 和 B 之间的最短距离。这些距离的和是 。
示例输入2
2 3
1
1 2
示例输出2
16
我们为每个白色方块分配如下字母。
ABC
DE#
然后,我们有:
- dist(A, B) =
- dist(A, C) =
- dist(A, D) =
- dist(A, E) =
- dist(B, C) =
- dist(B, D) =
- dist(B, E) =
- dist(C, D) =
- dist(C, E) =
- dist(D, E) =
这些距离的和是 。
示例输入3
3 3
1
1 1
示例输出3
64
示例输入4
4 4
4
0 1
1 1
2 1
2 2
示例输出4
268
示例输入5
1000000 1000000
1
0 0
示例输出5
333211937