CF1703D Double Strings

题目描述

给定 $n$ 个字符串 $s_1, s_2, \dots, s_n$,每个字符串的长度不超过 $8$。 对于每个字符串 $s_i$,判断是否存在两个字符串 $s_j$ 和 $s_k$,使得 $s_i = s_j + s_k$,即 $s_i$ 是 $s_j$ 和 $s_k$ 的拼接。注意,$j$ 可以等于 $k$。 回忆一下,字符串 $s$ 和 $t$ 的拼接定义为 $s + t = s_1 s_2 \dots s_p t_1 t_2 \dots t_q$,其中 $p$ 和 $q$ 分别是 $s$ 和 $t$ 的长度。例如,"code" 和 "forces" 的拼接是 "codeforces"。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 10^5$),表示字符串的数量。 接下来 $n$ 行,每行一个非空字符串 $s_i$,长度不超过 $8$,仅包含小写英文字母。给定的 $n$ 个字符串中可能有重复。 所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出一个长度为 $n$ 的二进制字符串。第 $i$ 位为 $\texttt{1}$ 表示存在 $s_j$ 和 $s_k$ 使得 $s_i = s_j + s_k$,否则为 $\texttt{0}$。注意,$j$ 可以等于 $k$。

说明/提示

在第一个测试用例中,有如下情况: - $s_1 = s_2 + s_2$,因为 $\texttt{abab} = \texttt{ab} + \texttt{ab}$。注意 $j$ 可以等于 $k$。 - $s_2$ 不是列表中任意两个字符串的拼接。 - $s_3 = s_2 + s_5$,因为 $\texttt{abc} = \texttt{ab} + \texttt{c}$。 - $s_4$ 不是列表中任意两个字符串的拼接。 - $s_5$ 不是列表中任意两个字符串的拼接。 因此,只有 $s_1$ 和 $s_3$ 满足条件,所以答案为 $\texttt{10100}$。 由 ChatGPT 4.1 翻译