题目描述
0 と 1 からなる同じ長さの二つの文字列 A = A1 A2 ... An と B = B1 B2 ... Bn があります。
あなたは、以下の操作を任意の順序で何度でも行って A を変化させることができます。
- A を一文字左にシフトする(すなわち、A = A1 A2 ... An として A を A2 A3 ... An A1 に置き換える)。
- A を一文字右にシフトする(すなわち、A = A1 A2 ... An として A を An A1 A2 ... An−1 に置き換える)。
- Bi = 1 であるような i をいずれか一つ選び、Ai を反転する(すなわち、Ai = 1 − Ai とする)。
あなたの目標は文字列 A, B を一致させることです。
これに必要な最小の操作回数を出力してください。ただし、これが不可能である場合は −1 と出力してください。
输入格式
入力は以下の形式で標準入力から与えられる。
A B
输出格式
文字列 A, B を一致させるために必要な最小の操作回数を出力せよ。ただし、これが不可能である場合は −1 と出力せよ。
题目大意
给你两个01串A和B,你可以进行以下3种操作:
- 将A左移一位(如"0011" -> "0110")
- 将A右移一位(如"0011" -> "1001")
- 选择一个满足Bi=1的位置i,令Ai=1−Ai
问要使A和B相等至少要进行几次操作。
1010
1100
3
1
0
-1
11010
10001
4
0100100
1111111
5
提示
制約
- 1 ≤ ∣A∣ = ∣B∣ ≤ 2,000
- A, B は 0 と 1 からなる。
Sample Explanation 1
目標を達成する最短の操作列を一つ示します。 - A1 を反転: A = 0010 - A を左にシフト: A = 0100 - A1 を再度反転: A = 1100
Sample Explanation 2
A の唯一のビットを反転させる方法はありません。
Sample Explanation 3
目標を達成する最短の操作列を一つ示します。 - A を右にシフト: A = 01101 - A5 を反転: A = 01100 - A を左にシフト: A = 11000 - A を再度左にシフト: A = 10001
Sample Explanation 4
A1, A3, A4, A6, A7 を任意の順序で反転すればよいです。