CF128B String
题目描述
一天,在信息技术课上,Anna 和 Maria 学习了字典序的概念。
如果字符串 $x$ 是字符串 $y$ 的前缀(且 $x \neq y$),或者存在某个 $i$($1 \leq i \leq \min(|x|, |y|)$),使得 $x_i < y_i$,并且对于任意 $j$($1 \leq j < i$)都有 $x_j = y_j$,那么字符串 $x$ 在字典序上小于字符串 $y$。这里 $|a|$ 表示字符串 $a$ 的长度。现代编程语言中,字符串的字典序比较通常由 < 运算符实现。
老师给 Anna 和 Maria 布置了家庭作业。她给了她们一个长度为 $n$ 的字符串。她们需要写出该字符串的所有子串,包括整个原字符串以及所有相同的子串(例如,对于字符串 "aab",应写出如下子串:"a"、"a"、"aa"、"ab"、"aab"、"b")。然后将这些子串按字典序排序。狡猾的老师并不想检查所有这些字符串,因此她只要求找出第 $k$ 个字符串。请帮助 Anna 和 Maria 完成作业。
输入格式
第一行是一个仅由小写拉丁字母("a"-"z")组成的非空字符串,长度不超过 $10^5$。
第二行是一个整数 $k$,$1 \leq k \leq 10^5$。
输出格式
输出 Anna 和 Maria 需要的字符串——即给定字符串所有子串按字典序排序后的第 $k$ 个字符串。如果子串总数小于 $k$,则输出 "No such line."(不含引号)。
说明/提示
在第二个样例中,排在字符串 "bc" 之前的子串依次为 "a"、"ab"、"abc"、"b"。
由 ChatGPT 4.1 翻译