AT_agc019_d [AGC019D] Shift and Flip
Description
[problemUrl]: https://atcoder.jp/contests/agc019/tasks/agc019_d
$ 0 $ と $ 1 $ からなる同じ長さの二つの文字列 $ A\ =\ A_1\ A_2\ ...\ A_n $ と $ B\ =\ B_1\ B_2\ ...\ B_n $ があります。
あなたは、以下の操作を任意の順序で何度でも行って $ A $ を変化させることができます。
- $ A $ を一文字左にシフトする(すなわち、$ A\ =\ A_1\ A_2\ ...\ A_n $ として $ A $ を $ A_2\ A_3\ ...\ A_n\ A_1 $ に置き換える)。
- $ A $ を一文字右にシフトする(すなわち、$ A\ =\ A_1\ A_2\ ...\ A_n $ として $ A $ を $ A_n\ A_1\ A_2\ ...\ A_{n-1} $ に置き換える)。
- $ B_i\ =\ 1 $ であるような $ i $ をいずれか一つ選び、$ A_i $ を反転する(すなわち、$ A_i\ =\ 1\ -\ A_i $ とする)。
あなたの目標は文字列 $ A,\ B $ を一致させることです。
これに必要な最小の操作回数を出力してください。ただし、これが不可能である場合は $ -1 $ と出力してください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ A $ $ B $
Output Format
文字列 $ A,\ B $ を一致させるために必要な最小の操作回数を出力せよ。ただし、これが不可能である場合は $ -1 $ と出力せよ。
Explanation/Hint
### 制約
- $ 1\ \leq\ |A|\ =\ |B|\ \leq\ 2,000 $
- $ A,\ B $ は $ 0 $ と $ 1 $ からなる。
### Sample Explanation 1
目標を達成する最短の操作列を一つ示します。 - $ A_1 $ を反転: $ A\ =\ 0010 $ - $ A $ を左にシフト: $ A\ =\ 0100 $ - $ A_1 $ を再度反転: $ A\ =\ 1100 $
### Sample Explanation 2
$ A $ の唯一のビットを反転させる方法はありません。
### Sample Explanation 3
目標を達成する最短の操作列を一つ示します。 - $ A $ を右にシフト: $ A\ =\ 01101 $ - $ A_5 $ を反転: $ A\ =\ 01100 $ - $ A $ を左にシフト: $ A\ =\ 11000 $ - $ A $ を再度左にシフト: $ A\ =\ 10001 $
### Sample Explanation 4
$ A_1 $, $ A_3 $, $ A_4 $, $ A_6 $, $ A_7 $ を任意の順序で反転すればよいです。