小红的染色平均数
题号:NC317996
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定一个长为 n 的数组 a = \{a_1, a_2,\dots,a_n\},其每一位元素都为红色或蓝色中的一种,且数组中至少有一个红色元素与一个蓝色元素,用一个长为 n 的仅包含 \texttt{0}, \texttt{1} 的字符串 s 表示,如果 s_i = \texttt{0} 则代表 a_i 是红色,反之则为蓝色。
\hspace{15pt}现在小红希望所有红色元素的平均数与所有蓝色元素的平均数相等。为此,她可以做若干次如下操作:
\hspace{23pt}\bullet 选择 i,j\left(1 \leq i, j \leq n , i \ne j\right),使得 a_i 变为 a_i + 1a_j 变为 a_j - 1,操作过程中 a_i 可取任意整数(包括负数)。
\hspace{15pt}小红想知道最少需要多少次操作才可以使得两种颜色元素的平均数相等,请你计算出可能的最小操作次数,或输出 -1,代表这不可能。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(2 \leq n \leq 2\times 10^5 \right)
\hspace{15pt}第二行依次输入 n 个整数 a_1, a_2,\dots,a_n\left(0 \leq a_i \leq 10^5 \right)
\hspace{15pt}第三行输入一个长为 n 的字符串 s,保证其仅包含 \texttt{0}, \texttt{1}

输出描述:

\hspace{15pt}如果不存在操作方法使得两种颜色元素的平均数相等,请输出 -1;否则请输出一个整数,代表可能的最小操作次数。
示例1

输入

复制
6
1 1 4 5 1 4
001011

输出

复制
1

说明

\hspace{15pt}一种可能的操作方法为选择 i=4,j=5,数组变为 \{1,1,4,6,0,4\},此时红色元素的平均数为 \tfrac{1+1+6}{3} = \tfrac{8}{3},蓝色元素的平均数为 \tfrac{4+0+4}{3} = \tfrac{8}{3}
示例2

输入

复制
7
1 9 1 9 8 1 0
0100101

输出

复制
-1