编程题
### 问题描述 小蓝和小桥正在玩一个有趣的游戏。他们有一个长度为 $n$ 的整数数组 $a$ 和一个由小写英文字母组成的字符串 $s$。现在他们需要将数组 $a$ 中的数字变成字符串 $s$ 中的字母,使最终得到的字符串与 $s$ 相同。 具体来说,他们会不断进行以下操作: 从数组 $a$ 中选择一个数字 $x$ 和一个字母 $y$,将数组 $a$ 中所有等于 $x$ 的数字替换成 $y$。 例如,如果初始时数组 $a=[2,3,2,4,1]$,字符串 $s$ 为 "cacta",则他们可以通过下列操作得到字符串 "cacta": - 选择数字 $2$ 和字母 $c$,将数组 $a$ 中所有等于 $2$ 的数字替换成 $c$,得到数组 $a=[c,3,c,4,1]$。 - 选择数字 $3$ 和字母 $a$,将数组 $a$ 中所有等于 $3$ 的数字替换成 $a$,得到数组 $a=[c,a,c,4,1]$。 - 选择数字 $4$ 和字母 $t$,将数组 $a$ 中所有等于 $4$ 的数字替换成 $t$,得到数组 $a=[c,a,c,t,1]$。 - 选择数字 $1$ 和字母 $a$,将数组 $a$ 中所有等于 $1$ 的数字替换成 $a$,得到数组 $a=[c,a,c,t,a]$。 最终,他们将得到的所有字母连接起来,得到字符串 "cacta"。 现在,问你能否通过这些操作从数组 $a$ 得到字符串 $s$? ### 输入格式 第一行包含一个整数 $t$,表示测试数据组数。 对于每组数据,第一行包含一个整数 $n$,表示数组 $a$ 和字符串 $s$ 的长度。 第二行包含 $n$ 个整数 $a_1,a_2,\dots,a_n$,表示数组 $a$ 中的元素。 第三行包含一个长度为 $n$ 的字符串 $s$,表示目标字符串。 ### 输出格式 对于每组数据,输出一行,如果可以通过操作从数组 $a$ 得到字符串 $s$,则输出 "YES",否则输出 "NO"。 ### 样例输入 ```txt 7 5 2 3 2 4 1 cacta 1 50 a 2 11 22 ab 4 1 2 2 1 aaab 5 1 2 3 2 1 aaaaa 6 1 10 2 9 3 8 azzfdb 7 1 2 3 4 1 1 2 abababb ``` ### 样例输出 ```txt YES YES YES NO YES YES NO ``` ### 样例说明 第一个测试用例对应题目描述中的样例。 第二个测试用例中,我们可以选择数字 $50$ 和字母 $\texttt{a}$,此时 $a=[\texttt{a}]$。 第三个测试用例中,我们可以先选择数字 $11$ 和字母 $\texttt{a}$,此时 $a=[a,22]$。再选择数字 $22$ 和字母 $\texttt{b}$,此时 $a=[a,b]$。 第五个测试用例中,我们可以将每个数字都替换成字母 $\texttt{a}$。 ### 评测数据规模 对于 $100$% 的评测数据,$1\leq t \leq 10^3, 1\leq n \leq 50, 1\leq a_i \leq 50$。
查看答案
赣ICP备20007335号-2