白兔的字符串
有人帮忙看看代码吗?最后两个测试点显示段错误
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+6;
string t;char s[N];ll H[N];
const int mod=2147483587;
ll Hash,por;
int base=25165843,ans[1010];
unordered_map<ll,int>mp;
void init(int len)
{
Hash=0;
t+=t;
H[0]=0;
por=1;
for(int i=1;i<=len;i++)
por=por*base%mod;
for(int i=0;i<2*len;i++)
{
Hash=(Hash*base%mod+t[i]-'a')%mod;
H[i+1]=Hash;
if(i>=len){mp[((H[i+1]-H[i+1-len]*por)%mod+mod)%mod]=1;}
}
}
int main()
{
cin>>t;
int len=t.size();
init(len);
int n,let;
ll hs;
memset(ans,0,sizeof(ans));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s;
let=strlen(s);
if(let<len)
continue;
hs=0;H[0]=0;
for(int j=0;j<let;j++)
{
hs=(hs*base%mod+s[j]-'a')%mod;
H[j+1]=hs;
}
for(int j=len;j<=let;j++)
{
if(mp[((H[j]-H[j-len]*por)%mod+mod)%mod]==1)ans[i]++;
}
}
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}