小苯的Z串匹配
题号:NC290484
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个长度为 n 的数组 a,同时他还另有一个长度也为 n 的字符串 S,仅由 '<', '>' 和 'Z' 三种字符组成。
据说,串 S 恰好是用来 "匹配" a 数组的,具体的:

\hspace{15pt}\bullet 如果 S_i= '<',则意味着必须有:a_i<0
\hspace{15pt}\bullet 如果 S_i= '>',则意味着必须有:a_i>0
\hspace{15pt}\bullet 如果 S_i= 'Z',则意味着必须有:a_{i-1} \times a_i>0,\ (1 < i\leq n)

\hspace{15pt}然而,现在的数组 a 并不一定满足 S 的匹配要求,因此小苯需要进行一些修改操作,具体的:
\hspace{15pt}\bullet 小苯可以选择一个数字 a_i\ (1 \leq i \leq n),将 a_i 修改为任意整数 x\ (-10^9 \leq x \leq 10^9)

\hspace{15pt}现在,小苯想知道他至少需要多少次修改,才能使得 a 满足 S 的匹配要求,请你帮他算一算吧。

输入描述:

本题有多组测试数据。
输入的第一行包含一个正整数 T\ (1 \leq T \leq 100),表示数据组数。
接下来包含 T 组数据,每组数据的格式如下:
第一行一个正整数 n\ (1 \leq n \leq 2 \times 10^5),表示数组 a 和串 S 的长度。
第二行 n 个整数 a_i\ (-10^9 \leq a_i \leq 10^9),表示数组 a
第三行一个长度为 n 的字符串 S。(保证 S 仅由 '<', '>' 和 'Z' 三种字符构成)。
(保证所有测试数据中,n 的总和不超过 2 \times 10^5。)
(特别的,保证 S_1 \neq 'Z'。)

输出描述:

对于每组测试数据:
在单独的一行输出一个整数,表示最少的修改次数。
示例1

输入

复制
2
6
-1 4 -6 3 2 -11
>Z<>>Z
4
1 1 1 1
>ZZ<

输出

复制
2
1

说明

对于第一组测试数据:
修改 a_1=3a_6=1 即可,因此两次操作即可。
对于第二组测试数据:
修改 a_4=-9 即可,一次操作即可。