服装网站建设可行性分析,电商设计英语,短剧cps分销平台官网,页面访问题意#xff1a;
有一串字符串,问求出有多少个循环节连续重复组成#xff0c;即可以用KMP直接求出循环节有多少个字符组成。答案就是l/next[l]#xff08;刚开始理解错题意#xff0c;认为是找出最多的重复子串#xff09;
题目
Given two strings a and b we define a…题意
有一串字符串,问求出有多少个循环节连续重复组成即可以用KMP直接求出循环节有多少个字符组成。答案就是l/next[l]刚开始理解错题意认为是找出最多的重复子串
题目
Given two strings a and b we define ab to be their concatenation. For example, if a “abc” and b “def” then ab “abcdef”. If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 “” (the empty string) and a^(n1) a*(a^n). Input Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case. Output For each s you should print the largest n such that s a^n for some string a. Sample Input abcd aaaa ababab . Sample Output 1 4 3 Hint This problem has huge input, use scanf instead of cin to avoid time limit exceed.
思路
1.即可以用KMP直接求出循环节有多少个字符组成。答案就是l/next[l]。 2.若不连续则循环节个数为一。
ac代码
#include cstdio
#include cstring
#include algorithm
const int M1e610;
int next[M] ;
char str[M] ;
void getnext(int l)
{int j 0 , k -1 ;next[0] -1 ;while(j l){if( k -1 || str[j] str[k] )next[j] k ;elsek next[k] ;}
}
int main()
{int l , m ;while(~scanf(%s, str)str[0]! .){l strlen(str);getnext(l) ;m next[l];if( l % (l-next[l]) ! 0 )printf(1\n);else{int k l/( l-next[l]);printf(%d\n,k);}memset(str,0,sizeof(str));}return 0;
}/**题目要求有循环节重复连续即整个串是用循环节组成的*/