播放指针初始位置为已播放歌词个数 k0 = count(t[i] == '1')
。未播放的歌词就是 s[k0+1..n]
。幸运串长度为
m = Σ(cnt[i]) i=1..26
要让未播放部分正好是幸运串,必须满足
n − k = m ⇔ k = n − m
因此,唯一可行的目标前缀长度 k* = n−m
。每次操作将 k
±1,最少操作次数即为
小红正在听歌,屏幕上同时展示着歌词和对应的播放进度条。设:
小红每次可以操作快进或回退一个歌词(即将播放指针向右或向左移动一个位置),数据初始时和操 作过程均保证已经播放的歌词是s的一个前缀(可为空串)。
她的目标是:以尽可能少的操作次数,使得字符串s中未播放状态的歌词是"幸运串"。
请你计算,为了达到该目标,至少需要多少次操作?(数据保证可以在有限次内完成操作目标)
【幸运串】每种字母出现的次数为指定的次数,可为空串,具体可查看输入描述。
输入第一行包含26个整数,表示一个幸运串每种字母出现的次数, cnt1,cnt2,⋅,cnt26(0≦cnti≦n)对应a,b,...,z的出现次数。
输入第二行一个整数n(1≦n≤2×105),表示歌词的长度。
输入第三行包含一个字符串s,表示歌曲的完整歌词,仅由小写字母构成。
输入第四行包含一个字符串t,表示歌词的播放进度条,仅由字符0和1组成。保证字符串中全部的1都位于全部的0之前(符合常识逻辑)。
输出一个整数,表示使得未播放歌词构成幸运串所需要的最少操作次数。
输入
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8
acabccab
11111000
输出
1
只需要快进一次,即向右移动一次,使得a和b未播放的歌词都剩余一次。
输入
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8
acabccab
11111100
输出
0
不用操作,此时a和b未播放的歌词都剩余一次。