困难的串(Krypton Factor,UVa 129)

来源:互联网 发布:淘宝全球购如何申请 编辑:程序博客网 时间:2024/05/18 00:56

题意:如果一个字符串包含两个相邻的重复子串,则称它是”容易“的串,其他的串称为”困难的串“。
例如:BB,ABCDACABCAB,ABCDABCD,都是容易的串,而D,DC,ABDAB都是困难的串。
输入正整数n和L,输出前L个字符组成的字典序第k小的困难串。
例如:L=3,前7个困难串 是A,AB,ABA,ABAC,ABACA,ABACAB,ABACABA。
输入保证答案不超过80个字符
样例:
输入:7 3 输出:ABACABA
输入:30 3 输出:ABACABCACBABCABACABCACBACABA

分析:判断连续的重复子串,比较容易想到的是检查尝试得到的串中的所有长度为偶数的子串,前后的两半不同就符合条件。但是,这样必须找到所有的长度为偶数子串,肯定会TLE。 之前的N皇后问题,判断前后摆放的皇后,只判断了以后的皇后是否和以前的冲突,而没有判断以前的皇后是否相互冲突。
类似于这个思路,这里只需要判断当前串的后缀,而不是所有的长度为偶数的子串

详解见紫书P195. 后面的Genetic Code也是和这里一样。