题目描述
薯条哥拿到了一个长度为 n,仅由字符 0、1和Z组成的字符串 s1,s2,…,sn。据说,这个字符串是用来匹配数组的。
我们称由 n 个整数组成的数组{a1,a2,...,an}满足匹配字符串 s=s1,s2,…,sn 的要求,当且仅当对于每个 i(1≤i≤n)有:
si 为 0 时,ai≤0;
si 为 1时,ai≥0;
si 为 Z 时,ai=0,且 ai−1×ai+1≥0(如果 i=1 或 i=n ,则没有这个限制)。
你可以对数组中的任意元素进行修改,每个修改操作可以将该元素改为任意整数。求最少需要修改多少个元素,使得修改后的数组满足上述匹配要求。
输入描述
第一行输入一个整数 n(1≤n<2×105)代表匹配长度。
第二行输入一个长度为 n 的字符串 s,字符串仅由 0、1 和 Z三种字符组成。
第三行输入 n 个整数 a1,a2,...,an(−106≤ai≤106) 代表数组中的元素。
输出描述
输出一个整数,代表最少需要修改的元素个数。
样例1
输入
4
Z0Z0
-1 -2 3 4
输出
3
样例解释
在这个样例中:
对于第一个位置,由于 s1=Z,所以 a1 应当 =0,将其修改。
对于第二个位置,由于 s2=0,所以 a2 应当 ≤0,此时, a2 已经满足条件,不需要修改。
对于第三个位置,由于 s3=Z,所以 a3 应当 =0,将其修改
对于第四个位置,由于 s4=0,所以 a4 应当 ≤0,不妨将其修改为 −4。
至此,数组修改了 3 次,为 {0,−2,0,−4}。检查每一个 Z,发现:
对于 S1 的 Z,没有额外条件;
而对于 s3 的 Z,此时已经有 a2×a4≥0 满足条件。
所以数组被 s 匹配。我们可以证明,在这个样例中,至少需要修改 3 个元素。
样例2
输入
3
01Z
-9 6 0
输出
0