解码带有重复模式的字符串循环移位
Kotlin
Hard
strings
任务 «解码带有重复模式的字符串循环移位»
给定一个编码后的字符串,该字符串由原始字符串经过以下步骤得到:先向左循环移动 K 位(0 ≤ K < 字符串长度),然后将每个字符替换为其对应的十进制 ASCII 码。原始字符串仅由小写拉丁字母(a-z)组成,长度不超过 1000。已知原始字符串是某个长度为 P(1 ≤ P ≤ 字符串长度)的模板(模式)重复多次得到的结果——即字符串形式为 S = T + T + ... + T(重复整数次)。需要找出最小可能的模板长度 P,并恢复循环移位前的原始字符串。如果存在多个可能的原始字符串,则选择字典序最小的(指原始未移位状态下的字符串)。输入数据:一行字符串,包含由空格分隔的整数序列——即编码后的字符串。序列长度为 L(1 ≤ L ≤ 2000)。输出数据:两个数字——最小模板长度 P 和移位值 K,然后在下一行输出恢复后的原始字符串(移位前)。如果无法恢复,则输出 -1。
输入格式
一行包含以空格分隔的整数——编码字符串的字符代码。
输出格式
在第一行有两个整数:P 和 K。在第二行中——是移位前的原始字符串。如果未找到解,则输出 -1。
示例
示例 1
输入
99 97 98 99 97 98
输出
3 1
abcabc
示例 2
输入
97 98 97 98
输出
2 0
abab
main.kt