atcoder#AGC019D. [AGC019D] Shift and Flip

[AGC019D] Shift and Flip

分数 : 10001000

问题陈述

您有两个字符串 A=A1A2...AnA = A_1 A_2 ... A_nB=B1B2...BnB = B_1 B_2 ... B_n,它们的长度相同,均由 0011 组成。

您可以使用以下操作以任意顺序和任意次数变换 AA

  • AA 向左移动一个字符(即,如果 A=A1A2...AnA = A_1 A_2 ... A_n,则将 AA 替换为 A2A3...AnA1A_2 A_3 ... A_n A_1)。
  • AA 向右移动一个字符(即,如果 A=A1A2...AnA = A_1 A_2 ... A_n,则将 AA 替换为 AnA1A2...An1A_n A_1 A_2 ... A_{n-1})。
  • 选择任意 ii 使得 Bi=1B_i = 1。翻转 AiA_i(即,设置 Ai=1AiA_i = 1 - A_i)。

您的目标是使字符串 AABB 相等。

打印实现这一目标所需的最少操作次数,或者如果目标无法实现,则打印 1-1

约束条件

  • 1A=B2,0001 \leq |A| = |B| \leq 2,000
  • AABB0011 组成。

输入

输入来自标准输入,格式如下:

AA

BB

输出

打印使字符串 AABB 相等所需的最少操作次数,或者如果目标无法实现,则打印 1-1

1010
1100
3

这里是实现目标的最快方法之一:

  • 翻转 A1A_1A=0010A = 0010
  • AA 向左移动:A=0100A = 0100
  • 再次翻转 A1A_1A=1100A = 1100
1
0
-1

没有办法翻转 AA 中的唯一一个位。

11010
10001
4

这里是实现目标的最快方法之一:

  • AA 向右移动:A=01101A = 01101
  • 翻转 A5A_5A=01100A = 01100
  • AA 向左移动:A=11000A = 11000
  • 再次将 AA 向左移动:A=10001A = 10001
0100100
1111111
5

以任意顺序翻转 A1A_1A3A_3A4A_4A6A_6A7A_7