/
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 100 点
問題文
縦 H マス、横 W マスのグリッドがあります。上から i 行目、左から j 列目のマスを (i, j) とします。 各マス (i,j) には、そのマスにブロックが配置される時刻を表す整数 A_{i,j} が書かれています。
時刻は 1 から K = \max(A_{i,j}) まで進みます。配列 A は以下の性質を満たします。
- 1 \leq k \leq K を満たす任意の整数 k について、A_{i,j} = k となるマスが少なくとも 1 つ存在する。
- 同じ値 k を持つマスの集合は、上下左右に連結している。
- ブロックは各列で下から順に積まれる。すなわち、任意の 1 \leq i \leq H-1 と 1 \leq j \leq W に対して A_{i+1, j} \leq A_{i, j} が成り立つ。
ある時刻において、列 j に積み上がっているブロックの個数を h_j とします。初期状態ではすべての列で h_j = 0 です。
soryuusi 君は初期状態において列 s にいます。 時刻 k = 1, 2, \dots, K に対して、順に以下のようにゲームが進行します。
- soryuusi 君の移動:soryuusi 君はグリッド内の左右に隣接する列へ 1 列ずつ、任意の回数だけ移動することができる(移動せず現在の列に留まることも可能である)。 列 x から隣接する列 y へ 1 列移動するごとに、その時点でのブロックの高さを用いて |h_x - h_y| + 1 のスタミナを消費する。
- ブロックの配置:A_{i,j} = k となるすべてのマスにブロックが配置され、該当する列の h_j が配置されたブロックの個数分だけそれぞれ増加する。 このとき、soryuusi 君が現在いる列に 1 つでも新たにブロックが配置された場合、soryuusi 君は押し潰されてゲームオーバーとなる。
時刻 K のブロックの配置が終了するまで soryuusi 君がゲームオーバーにならずに生き残ることができるか判定し、可能な場合は消費するスタミナの合計の最小値を求めてください。生き残ることが不可能な場合は -1 を出力してください。
T 個のテストケースが与えられるので、それぞれについて答えを求めてください。
制約
- 1 \leq T \leq 10^5
- 1 \leq H, W
- H \times W \leq 5 \times 10^5
- 1 \leq s \leq W
- 1 \leq A_{i,j} \leq H \times W \ (1 \leq i \leq H, 1 \leq j \leq W)
- 1 \leq k \leq K を満たす任意の整数 k について、A_{i,j} = k となるマス (i,j) が少なくとも 1 つ存在する
- A_{i,j} = k となるマス (i,j) の集合は、上下左右に連結している
- A_{i+1, j} \leq A_{i, j} \ (1 \leq i \leq H-1, 1 \leq j \leq W)
- すべてのテストケースについての H \times W の総和は 5 \times 10^5 以下
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T
各テストケースは以下の形式で与えられる。
H W s
A_{1,1} A_{1,2} \dots A_{1,W}
A_{2,1} A_{2,2} \dots A_{2,W}
\vdots
A_{H,1} A_{H,2} \dots A_{H,W}
出力
答えを合計 T 行で出力せよ。
t 行目には、t 番目のテストケースについて、消費するスタミナの最小値を出力せよ。ただし、生き残ることが不可能な場合は -1 を出力せよ。
入力例 1
3 3 4 1 3 3 3 2 3 1 2 2 1 1 1 2 2 3 2 2 2 3 1 2 2 4 5 5 16 17 18 19 20 11 12 13 14 15 6 7 8 9 10 1 2 3 4 5
出力例 1
10 -1 8
1 つ目のテストケースについて、soryuusi 君は以下のように行動することで、消費スタミナ 10 を達成できます。
- 4 列目に移動する。(|0 - 0| + 1) + (|0 - 0| + 1) + (|0 - 0| + 1) = 3 のスタミナを消費する。
- 時刻 1 のブロックが配置される。
- 2 列目に移動する。(|0 - 1| + 1) + (|1 - 2| + 1) = 4 のスタミナを消費する。
- 時刻 2 のブロックが配置される。
- 4 列目に移動する。(|2 - 2| + 1) + (|2 - 3| + 1) = 3 のスタミナを消費する。
- 時刻 3 のブロックが配置される。
消費スタミナ 9 以下で生き残ることは不可能なので、消費スタミナの最小値は 10 です。

2 つ目のテストケースについて、soryuusi 君はどのように行動しても、時刻 2 のブロックの配置を回避することはできません。したがって、このテストケースに対する出力は -1 となります。