atcoder#ARC132D. [ARC132D] Between Two Binary Strings

[ARC132D] Between Two Binary Strings

题目描述

文字列の 美しさ を、その文字列のなかで同じ 2 2 文字が隣り合っている位置の個数として定義します。 例えば、00011 の美しさは 3 3 で、10101 の美しさは 0 0 です。

Sn,m S_{n,m} n n 文字の 0m m 文字の 1 からなる長さ n+m n+m の文字列全体の集合とします。

s1,s2  Sn,m s_1,s_2\ \in\ S_{n,m} について、s1,s2 s_1,s_2 距離 d(s1,s2) d(s_1,s_2) を 「隣り合った 2 2 文字を入れ替える操作によって文字列 s1 s_1 を文字列 s2 s_2 に並び替えるのに必要な最小の操作回数」 と定義します。

また、s1,s2,s3 Sn,m s_1,s_2,s_3\in\ S_{n,m} について、s2 s_2 s1 s_1 s3 s_3 間にある ことを、d(s1,s3)=d(s1,s2)+d(s2,s3) d(s_1,s_3)=d(s_1,s_2)+d(s_2,s_3) で定義します。

s,t Sn,m s,t\in\ S_{n,m} が与えられるので、s s t t の間にある文字列の美しさの最大値を出力してください。

输入格式

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

n n m m s s t t

输出格式

s s t t の間にある文字列の美しさの最大値を出力せよ。

题目大意

设一个 01 串的美丽值为相同的相邻数字个数。举个例子,00011 的美丽值为 3,而 10101 的美丽值为 0。

设两个长度相同,且 0 的个数相同的 01 串 s1,s2s_1,s_2 之间的距离 dis(s1,s2)dis(s_1,s_2) 为仅能交换相邻字符,使得 s1s_1 变成 s2s_2 的最小交换次数。

如果一个字符串 s3s_3 满足它在 s1,s2s_1,s_2 中间,则需要 dis(s1,s2)=dis(s1,s3)+dis(s3,s2)dis(s_1,s_2)=dis(s_1,s_3)+dis(s_3,s_2)

现在,给定两个长度为 n+mn+m 的,有 nn 个 0 的字符串 s,ts,t,请求出所有 s,ts,t 中间的字符串中,最大的美丽值。

2n+m3×1052\le n+m\le 3\times 10^5

2 3
10110
01101
2
4 2
000011
110000
4
12 26
01110111101110111101001101111010110110
10011110111011011001111011111101001110
22

提示

制約

  • 2  n + m 3× 105 2\ \le\ n\ +\ m\le\ 3\times\ 10^5
  • 0  n,m 0\ \le\ n,m
  • s,t s,t n n 文字の 0m m 文字の 1 からなる長さ n+m n+m の文字列

Sample Explanation 1

1011001101 の距離は 2 2 で、これらの間にある文字列は、10110, 01110, 01101, 10101 です。 それぞれの美しさは 1,2,1,0 1,2,1,0 であるため、答えは 2 2 です。

Sample Explanation 2

000011110000 の距離は 8 8 です。 美しさが最大になる文字列は 000011110000 で、答えは 4 4 です。