P15953 [ICPC 2018 Jakarta R] Smart Thief
题目描述
阿玉成功偷走了布迪的宝箱,准备揭开布迪隐藏的所有秘密。不幸的是,这个宝箱有一个安全系统,用来防止任何未经授权的人(例如阿玉)打开它。
要打开宝箱,阿玉必须输入一个长度为 $N$ 的正确 PIN 码(个人识别码),而她当然不知道这个 PIN 码。阿玉别无选择,只能尝试所有可能的 PIN 码组合。不过,阿玉注意到这个安全系统有一个有趣的(过时的)机制。
当你输入一个 $N$ 位 PIN 码时,系统会自动且立即进行评估,即你不需要按下某个“确认”按钮来提交 PIN 码。每当输入的 PIN 码错误时,系统会移除最旧的(第一个)数字,并将剩余的数字向左移动,因此你只需要再输入一个(最后一个)数字,即可使 PIN 码再次恢复长度为 $N$。例如,设 $N = 4$。如果我们输入 $204320435$,那么实际上我们测试了 $6$ 个 PIN 码(其中有 $5$ 个不同的 PIN 码):
- [$2043$]$20435$,测试的 PIN 码 = $2043$
- $2$[$0432$]$0435$,测试的 PIN 码 = $0432$
- $20$[$4320$]$435$,测试的 PIN 码 = $4320$
- $204$[$3204$]$35$,测试的 PIN 码 = $3204$
- $2043$[$2043$]$5$,测试的 PIN 码 = $2043$
- $20432$[$0435$],测试的 PIN 码 = $0435$
注意,在这个例子中 $2043$ 被测试了两次。
作为一名计算机科学专业的学生,阿玉知道通过尝试所有可能的组合来找到正确的 PIN 码非常耗时,但可惜没有其他办法。阿玉决定在第一天至少测试 $K$ 个不同的 PIN 码。你的任务是帮助阿玉,只需给出一个字符串 $S$,其中包含至少 $K$ 个不同的 PIN 码作为子串。阿玉不关心将要测试哪些 PIN 码(只要至少有 $K$ 个不同的 PIN 码),也不关心 $S$ 中是否有 PIN 码被多次测试,但字符串 $S$ 需要尽可能短。如果存在多个可能的 $S$ 字符串,你可以输出其中任意一个。
请注意,由于这个系统相当老旧,只有 $M$ 个可用数字,范围从 $0$ 到 $9$。
输入格式
输入的第一行包含三个整数:$N\ M\ K$($1 \leq N \leq 100000$,$1 \leq M \leq 10$,$1 \leq K \leq \min(M^N, 100000)$),分别表示 PIN 码的长度、可用数字的个数以及要测试的最小 PIN 码数量。下一行包含 $M$ 个整数:$A_i$($0 \leq A_i \leq 9$),表示可用的数字。你可以假设所有 $A_i$ 互不相同。你还可以假设 $N$、$M$ 和 $K$ 的取值使得答案的字符串长度不超过 $100000$。
输出格式
输出一行,输出 **最短的** 字符串,该字符串包含至少 $K$ 个不同的 PIN 码作为子串。如果存在多个这样的字符串,输出其中任意一个。
说明/提示
**样例输入 #1 的解释**
使用字符串 $7477447$ 测试了 $5$ 个不同的长度为 $3$ 的 PIN 码,即 $447$、$477$、$744$、$747$ 和 $774$。
**样例输入 #2 的解释**
使用字符串 $1234554321$ 测试了 $9$ 个不同的长度为 $2$ 的 PIN 码,即 $12$、$21$、$23$、$32$、$34$、$43$、$45$、$54$ 和 $55$。
**样例输入 #3 的解释**
使用字符串 $9353593$ 测试了 $2$ 个不同的长度为 $6$ 的 PIN 码,即 $353593$ 和 $935359$。
翻译由 DeepSeek V3.2 完成