Time Limit: 1 sec / Memory Limit: 256 MB
配点: 点
JOI 氏のコレクションルームには非常に大きな机があり,その上には何枚もの貴重なコインがある.机の掃除をするために,JOI 氏はコインを整理して並べることにした.
机は のマス目になっている.列には左から順に から までの番号がつけられており,行には下から順に から までの番号がつけられている.列の番号が ,行の番号が であるマスを () で表すことにする.
コインは 枚あり,現在, 番目 () のコインはマス () に置かれている.JOI 氏の目標は, かつ を満たす () で表される 個のマスに,それぞれコインが 枚ずつ置かれている状態にすることである.コインを傷つけないようにするため,「コインを 枚選び,それが置かれているマスと辺で隣り合ったマスのいずれかに,そのコインを移動させる」という操作のみができる.途中,複数のコインが同じマスに置かれていてもよい.JOI 氏は,できるだけ少ない回数の操作で目標を達成したい.
コインの枚数と,現在コインが置かれているマスが与えられたとき,目標を達成するために必要な操作回数の最小値を求めるプログラムを作成せよ.
入力
入力は以下の形式で標準入力から与えられる.
出力
標準出力に,目標を達成するために必要な操作回数の最小値を 行で出力せよ.
制約
- .
- ().
- ().
小課題
- ( 点) .
- ( 点) .
- ( 点) 追加の制約はない.
入力例 1Copy
3 0 0 0 4 4 0 2 1 2 5 -1 1
出力例 1Copy
15
この入力例では, 個のコインが下図のように置かれている.太枠で示した位置にコインを集めるのが目標である.

例えば,コインを以下のように移動させると, 回の操作で目標を達成できる:
- 番目のコイン:() → () → () → ()
- 番目のコイン:() → () → () → () → () → ()
- 番目のコイン:() → () → ()
- 番目のコイン:() → () → () → ()
- 番目のコイン:() → () → ()
回以下の操作で目標を達成することはできないので, を出力する.
入力例 2Copy
4 2 1 2 1 2 1 3 1 3 1 3 1 3 1 3 1
出力例 2Copy
9
同じマスに複数のコインが置かれているかもしれない.
入力例 3Copy
5 1000000000 1000000000 -1000000000 1000000000 -1000000000 -1000000000 1000000000 -1000000000 -1 -5 -2 2 2 8 4 7 -2 5 7 3
出力例 3Copy
8000000029