原题是英文,咱们按咱们的翻译来哈
有一个字符序列,现在问你:
序列后面最少补充几个元素使其恰能成为几个重复循环的序列。
Input
第一行是一个整数 T ( 0 < T <= 100 ) 代表测试数据的组数.
之后T行每行一个字符串. 由小写字母'a'-'z'组成. 字符串的长度为: ( 3 <= Len <= 100000 ).
Output
对于每组测试数据,输出一行,即序列后面最少补充几个元素使其恰能成为几个重复循环的序列。
输入样例
3
aaa
abca
abcde
输出样例
0
2
5
Hind
最小循环节(len / (len-next[len]))
此题妙就妙在有hint(不是hind233333)
我们看图中第一组样例
循环节:4
需要补充:2
然后暗示中公式:6-2=4;
再看第二组:
循环节:2
需要补充:0;
看出来没有啊~
没有的话我补一组
位置 0 1 2 3 4 5 6 7 8 9 10 11 12
内容 A B A B C A B A B C A B &
next-1 0 0 1 2 0 1 2 3 4 5 6 7
然后按照刚才的算式:12-7=5
我们可以发现12就是数组长度len,7就是next[len]的结果,算出来的5呢 就是循环节的长度
那么需要补充循环节怎么算呢
自然就是字符组长度对循环节长度取余咯
那么就有一个问题 该怎么实现呢
首先我们需要计算next
这个直接模板
//为了方便直接定义全局数组,但是记得初始化什么的
string s2;//这个定义在里面经过某人实践会wa 你懂的
int netx[100100];
int len;
void wnetx(){
int i=0,j=