kmp算法:
char ori[N*100], pat[N];
int Next[N];
void get_next(char *pat)
{
int i = 0, j = -1;
Next[0] = -1;
while(pat[i])
{
if(j == -1 || pat[i] == pat[j])
{
++i, ++j;
if(pat[i] != pat[j]) Next[i] = j;
else Next[i] = Next[j];
}
else j = Next[j];
}
}
int kmp(char *ori, char *pat)
{
get_next(pat);
int ans = 0;
int i = 0, j = 0;
while(ori[i])
{
if(j == -1 || ori[i] == pat[j]) ++i, ++j;
else j = Next[j];
if(j != -1 && !pat[j]) ans++, j = Next[j];
}
return ans;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%s%s", pat, ori);
int ans = kmp(ori, pat);
printf("%d\n", ans);
}
return 0;
}
const int N = 1000000 + 10;
char ori[N], pat[N];
int Next[N];
void get_next(char *pat)
{
int i = 0, j = -1;
Next[0] = -1;
while(pat[i])
{
if(j == -1 || pat[i] == pat[j]) Next[++i] = ++j;
else j = Next[j];
}
}
int main()
{
while(~scanf("%s", pat))
{
get_next(pat);
int len = strlen(pat);
if(len % (len - Next[len]) == 0) printf("%d\n", len / (len - Next[len]));
else printf("1\n");
}
return 0;
}