1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 二次元DPメニュー(言語選択)
  4. 問題一覧 Haskell(Beta)編
  5. 二次元 DP 基礎 Haskell(Beta)編

二次元DPメニューのサムネイル
二次元 DP 基礎 Haskell(Beta)編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

N 桁のダイヤルロックがあります。
最初ダイヤルロックの数字は D です。
左から i 桁目のダイヤルロックの数字を D_i と表します。
あなたは以下の 4 種類の操作を好きな回数行うことができます。

・操作 1:2 ≦ i ≦ N を満たす整数 i を 1 つ選ぶ。その後 D_{i-1} を (D_{i-1} + 1) mod 10 に、D_i を (D_i + 1) mod 10 に置き換える。
・操作 2:2 ≦ i ≦ N を満たす整数 i を 1 つ選ぶ。その後 D_{i-1} を (D_{i-1} - 1) mod 10 に、D_i を (D_i - 1) mod 10 に置き換える。
・操作 3:D_1 を (D_1 + 1) mod 10 に置き換える。
・操作 4:D_1 を (D_1 - 1) mod 10 に置き換える。

ここで、x mod y は x を y で割った余りを表します。
ダイヤルロックを解除するには、ダイヤルロックの数字を T にする必要があります。
ダイヤルロックを解除するために必要な操作回数の最小値を求めてください。
ただし、与えられる入力は有限回の操作で D を T にできることが保証されます。

入力例 1 では、以下のように操作できます。
・i = 2 として操作 1 を行う。操作後、ダイヤルロックは 95068 になる。
・i = 4 として操作 2 を行う。操作後、ダイヤルロックは 95958 になる。
・操作 3 を行う。操作後、ダイヤルロックは 05958 になる。
すべての操作を終えた後、ダイヤルロックの数字は 05958 であるため、操作回数 3 回でダイヤルロックを解除することができました。
操作回数 2 回以下でダイヤルロックを解除することはできないので、3 を出力します。

入力される値

入力は以下のフォーマットで与えられます。

N
D
T


・1 行目には、ダイヤルロックの桁数を表す整数 N が与えられます。
・2 行目には、最初のダイヤルロックの数字 D が与えられます。
・3 行目には、ダイヤルロックが解除される数字 T が与えられます。
・入力は合計で 3 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

ダイヤルロックを解除するために必要な操作回数の最小値を求めてください。
最後は改行し、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N ≦ 10^5
・D, T は 0~9 の数字からなる長さ N の文字列
・有限回の操作で D を T にすることが可能である

入力例1

5
84068
05958

出力例1

3

入力例2

10
7627961162
8595972239

出力例2

10

問題一覧へ戻る

ページの先頭へ戻る