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 完成