/*****************************8
kmp里next数组的应用, i%(i-next[i])==0 有循环 i/(i-next[i])>1确定次数
******************************/
4:前缀中的周期
- 总时间限制:
- 3000ms
- 内存限制:
- 65536kB
- 描述
-
- 输入
-
输入包括多组测试数据。每组测试数据包括两行。
第一行包括字符串S的长度N(2 <= N <= 1 000 000)。
第二行包括字符串S。
输入数据以只包括一个0的行作为结尾。 - 输出
-
对于每组测试数据,第一行输出 "Test case #“ 和测试数据的编号。
接下来的每一行,输出前缀长度i和重复测数K,中间用一个空格隔开。前缀长度需要升序排列。
在每组测试数据的最后输出一个空行。 - 样例输入
-
3 aaa 12 aabaabaabaab 0
- 样例输出
-
Test case #1 2 2 3 3 Test case #2 2 2 6 2 9 3 12 4
# include<iostream> # include<string> using namespace std; int next[1000005]; void get_next(string s,int next[]) { int length=s.length(); int i=0,j=-1; next[0]=-1; while(i<length) { if(j==-1||s[i]==s[j]) { i++; j++; next[i]=j; } else { j=next[j]; } } } int main(void) { int len; int t=1,j; while(cin>>len,len) { string s; cin>>s; get_next(s,next); cout<<"Test case #"<<t++<<endl; for(int i=2; i<=len; i++) { j=i-next[i]; if(i%j==0 && i/j>=2) cout<<i<<" "<<i/j<<endl; } cout<<endl; } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。