有人帮忙看看代码吗?最后两个测试点显示段错误
#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; }
全部评论
(0) 回帖