#3484. Neo-lexicographic Ordering

0

Neo-lexicographic Ordering

Neo-lexicographic Ordering

题目描述

Takahashi,统治 AtCoder 王国,决定更改英文字母小写字母的字母顺序。 新的字母顺序由字符串 XX 表示,XX 是 a,b,…,za, b, \ldots, z 的一个置换。XX 的第 ii 个字符 (1≤i≤26)(1 \leq i \leq 26) 将会是在新顺序中第 ii 小的英文字母小写字母。 王国有 NN 位公民,他们的名字是 S1,S2,…,SNS_1, S_2, \dots, S_N,其中每个 SiS_i (1≤i≤N)(1 \leq i \leq N) 都由小写英文字母组成。
请根据 Takahashi 决定的字母顺序按字典序对这些名字进行排序。

什么是字典序?

简单来说,字典序是单词按字典中列出的顺序。更正式的定义如下,用于确定不同字符串 SS 和 TT 之间的字典序关系的算法。

下面,记 SiS_i 为 SS 的第 ii 个字符。如果 SS 在字典序上小于 TT,我们记为 S<TS \lt T;如果 SS 在字典序上大于 TT,我们记为 S>TS \gt T。

    令 $L$ 为 $S$ 和 $T$ 的较小长度。对于每个 $i=1,2,\dots,L$,我们检查 $S_i$ 和 $T_i$ 是否相同。 如果存在某个 $i$ 使得 $S_i \neq T_i$,令 $j$ 为最小的这样的 $i$。然后,我们比较 $S_j$ 和 $T_j$。如果 $S_j$ 在字母顺序中出现在 $T_j$ 之前,则我们判断 $S \lt T$ 并结束;如果 $S_j$ 在 $T_j$ 之后,则我们判断 $S \gt T$ 并结束。

    如果不存在这样的 ii 使得 Si≠TiS_i \neq T_i,我们比较 SS 和 TT 的长度。如果 SS 比 TT 短,我们判断 S<TS \lt T 并结束;如果 SS 比 TT 长,我们判断 S>TS \gt T 并结束。

输入格式

输入从标准输入以如下格式给出: XX NN S1S_1 S2S_2 ⋮\vdots SNS_N

输出格式

打印 NN 行。第 ii 行 (1≤i≤N)(1 \leq i \leq N) 应该包含按 Takahashi 决定的字母顺序排序后第 ii 小的名字。

bacdefghijklmnopqrstuvwxzy
4
abx
bzz
bzy
caa
bzz
bzy
abx
caa
zyxwvutsrqponmlkjihgfedcba
5
a
ab
abc
ac
b
b
a
ac
ab
abc

提示

XX 是 a,b,…,za, b, \ldots, z 的一个置换。 2≤N≤500002 \leq N \leq 50000 NN 是整数。 1≤∣Si∣≤10 (1≤i≤N)1 \leq |S_i| \leq 10 \, (1 \leq i \leq N) SiS_i 由小写英文字母组成。 (1≤i≤N)(1 \leq i \leq N) Si≠SjS_i \neq S_j (1≤i<j≤N)(1 \leq i \lt j \leq N)在 Takahashi 设定的新字母顺序中,bb 小于 aa 且 zz 小于 yy。因此,将公民的名字按字典序排序会得到按升序排列的 bzzbzz, bzybzy, abxabx, caacaa。

标签: AtCoder|abc219C

来源

AtCoder|abc219C