#P17080. 摩卡数
摩卡数
1005. 摩卡数
题目描述
小摩卡是个天才,尤其在字符串理论方面有着异于常人的天赋。为了赞颂她的才华,人们常常将那些满足特定优美性质的字符串命名为“摩卡串”。小摩卡上本科时,在数据结构与算法分析课程中学到了 KMP 自动机,并想出了如下构建一个字符串 S 的 KMP 自动机的算法。在算法中:
-
S 是长度为 n 的输入字符串,仅包含前 σ 个小写字母。
-
π 是 S 的前缀函数。π[i] 的值是满足 k < i 且 S[1, k] = S[i −k + 1, i] 的最大 k。若不存在这样的正整数 k,则 π[i] = 0。
-
S[l, r] 表示仅保留 S 中第 l 个到第 r 个位置的字符所构成的子串。
-
δ 是 KMP 自动机的转移表。δ[i, j] 表示如果当前状态为 i 且输入字符为 j,则新状态变为 δ[i, j]。
-
k 是一个计数器。
小摩卡定义,算法结束后 k 的值即为字符串 S 的摩卡数。请你构造一个字符串 S 并指定 S 的字符集大小 σ,使得对字符串 S 运行该算
法,所得到的摩卡数恰好为 k。你需要保证构造的字符串的长度不超过 105。
输入格式
第一行输入一个正整数 T (1 ≤ T ≤ 50),表示数据组数。接下来按如下格式输入 T 组数据:输入一行一个正整数 k (1 ≤ k ≤ 109 ),表示摩卡数的值。
输出格式
对于每组数据,输出两行:
-
第一行输出两个用空格分隔的正整数 n, σ,表示字符串的长度和字符集的大小。
-
第二行输出一行一个字符串 S。
你需要保证 1 ≤ n ≤ 105, 1 ≤ σ ≤ 26,S 的长度为 n,且 S 仅包含前 σ 个小写英文字母。本题使用 Special Judge 测试,如有多个满足条件的答案,你可以输出任意一种。你不需要最小化字符串 S 的长度或字典序。可以证明在题目限制内,一定存在至少一组满足条件的解。
样例输入
2
14
697
样例输出
6 3
abcabc
21 26
cbababcbbabcbbabcbabc
提示
请注意样例输出仅表示一种可能的合法答案,并不表示该样例输出恰好对应标准程序的输出。本题输出量可能较大,建议使用较快速的输出方式(如关闭流同步的cout)。
来源:官方题面 PDF(2026"钉耙编程"暑期联赛 第1场)