atcoder#AGC019D. [AGC019D] Shift and Flip

[AGC019D] Shift and Flip

配点 : 10001000

問題文

0011 からなる同じ長さの二つの文字列 A=A1A2...AnA = A_1 A_2 ... A_nB=B1B2...BnB = B_1 B_2 ... B_n があります。

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

  • AA を一文字左にシフトする(すなわち、A=A1A2...AnA = A_1 A_2 ... A_n として AAA2A3...AnA1A_2 A_3 ... A_n A_1 に置き換える)。
  • AA を一文字右にシフトする(すなわち、A=A1A2...AnA = A_1 A_2 ... A_n として AAAnA1A2...An1A_n A_1 A_2 ... A_{n-1} に置き換える)。
  • Bi=1B_i = 1 であるような ii をいずれか一つ選び、AiA_i を反転する(すなわち、Ai=1AiA_i = 1 - A_i とする)。

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

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

制約

  • 1A=B2,0001 \leq |A| = |B| \leq 2,000
  • A,BA, B0011 からなる。

入力

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

AA

BB

出力

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

1010
1100
3

目標を達成する最短の操作列を一つ示します。

  • A1A_1 を反転: A=0010A = 0010
  • AA を左にシフト: A=0100A = 0100
  • A1A_1 を再度反転: A=1100A = 1100
1
0
-1

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

11010
10001
4

目標を達成する最短の操作列を一つ示します。

  • AA を右にシフト: A=01101A = 01101
  • A5A_5 を反転: A=01100A = 01100
  • AA を左にシフト: A=11000A = 11000
  • AA を再度左にシフト: A=10001A = 10001
0100100
1111111
5

A1A_1, A3A_3, A4A_4, A6A_6, A7A_7 を任意の順序で反転すればよいです。