F. Mascot Naming
构造题, 挂个链接.
题面
当组织一场大型活动时,组织者常常要处理一些超出他们专业领域的附带任务。例如,2025年欧洲大学锦标赛(EUC 2025)的首席裁判必须为该活动的官方吉祥物取一个名字,同时要满足某些限制条件:
- 这个名字必须包含特定的单词作为子序列*,比如活动名称和举办地点。会给你一个包含\(n\)个所需单词的列表\(s_1,\, s_2,\, \ldots,\, s_n\)。
- 这个名字不能包含去年吉祥物的名字\(t\)作为子序列*。
请帮助首席裁判找到一个有效的吉祥物名字,或者确定不存在这样的名字。
* 如果一个字符串\(x\)是一个字符串\(y\)的子序列,当且仅当\(x\)可以通过删除字符串\(y\)中的一些字符(在任意位置),并保持其余字符的顺序不变而得到。例如,\(\texttt{abc}\)是\(\texttt{axbycz}\)的一个子序列,但不是\(\texttt{acbxyz}\)的子序列。
思路
考虑什么时候输出 NO
. 可以发现如果 \(t\) 为 \(s_i\) 的子序列时, 任意包含子序列 \(s_i\) 的字符串也一定包含 \(t\), 这时无法构造出合法的字符串. 否则我们可以贪心地进行构造.
怎么构造呢? 我们逐个字符进行考虑, 重复以下步骤, 直至所有 \(s_i\) 均为空.
- 如果存在一个字符 \(c\), 使得至少一个 \(s_i\) 以 \(c\) 开头, 并且 \(t\) 不以 \(c\) 开头, 那么就可以将 \(c\) 加入进答案序列中, 并将所有以 \(c\) 开头的 \(s_i\) 删除掉开头.
- 否则如果所有的 \(s_i\) 和 \(t\) 的开头均相等, 那么我们将这个字符加入进答案序列中, 并删除所有 \(s_i\) 和 \(t\) 的开头.
构造完成, 输出答案序列即可. 由于 \(t\) 不是任何一个 \(s_i\) 的子序列, 所以 \(t\) 在最后一定非空, 这样 \(t\) 当然就不是答案序列的子序列啦.