#AGC019D. [AGC019D] Shift and Flip

[AGC019D] Shift and Flip

题目描述

0 0 1 1 からなる同じ長さの二つの文字列 A = A1 A2 ... An A\ =\ A_1\ A_2\ ...\ A_n B = B1 B2 ... Bn B\ =\ B_1\ B_2\ ...\ B_n があります。

あなたは、以下の操作を任意の順序で何度でも行って A A を変化させることができます。

  • A A を一文字左にシフトする(すなわち、A = A1 A2 ... An A\ =\ A_1\ A_2\ ...\ A_n として A A A2 A3 ... An A1 A_2\ A_3\ ...\ A_n\ A_1 に置き換える)。
  • A A を一文字右にシフトする(すなわち、A = A1 A2 ... An A\ =\ A_1\ A_2\ ...\ A_n として A A An A1 A2 ... An1 A_n\ A_1\ A_2\ ...\ A_{n-1} に置き換える)。
  • Bi = 1 B_i\ =\ 1 であるような i i をいずれか一つ選び、Ai A_i を反転する(すなわち、Ai = 1  Ai A_i\ =\ 1\ -\ A_i とする)。

あなたの目標は文字列 A, B A,\ B を一致させることです。

これに必要な最小の操作回数を出力してください。ただし、これが不可能である場合は 1 -1 と出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

A A B B

输出格式

文字列 A, B A,\ B を一致させるために必要な最小の操作回数を出力せよ。ただし、これが不可能である場合は 1 -1 と出力せよ。

题目大意

给你两个01串A和B,你可以进行以下3种操作:

  1. 将A左移一位(如"0011" -> "0110")
  2. 将A右移一位(如"0011" -> "1001")
  3. 选择一个满足Bi=1B_i=1的位置i,令Ai=1AiA_i=1-A_i

问要使A和B相等至少要进行几次操作。

1010
1100
3
1
0
-1
11010
10001
4
0100100
1111111
5

提示

制約

  • 1  A = B  2,000 1\ \leq\ |A|\ =\ |B|\ \leq\ 2,000
  • A, B A,\ B 0 0 1 1 からなる。

Sample Explanation 1

目標を達成する最短の操作列を一つ示します。 - A1 A_1 を反転: A = 0010 A\ =\ 0010 - A A を左にシフト: A = 0100 A\ =\ 0100 - A1 A_1 を再度反転: A = 1100 A\ =\ 1100

Sample Explanation 2

A A の唯一のビットを反転させる方法はありません。

Sample Explanation 3

目標を達成する最短の操作列を一つ示します。 - A A を右にシフト: A = 01101 A\ =\ 01101 - A5 A_5 を反転: A = 01100 A\ =\ 01100 - A A を左にシフト: A = 11000 A\ =\ 11000 - A A を再度左にシフト: A = 10001 A\ =\ 10001

Sample Explanation 4

A1 A_1 , A3 A_3 , A4 A_4 , A6 A_6 , A7 A_7 を任意の順序で反転すればよいです。