竞赛讨论区 > 白兔的字符串

白兔的字符串

头像
Aarynon
发布于 2021-01-21 16:45:43 APP内打开
赞 0 | 收藏 0 | 回复0 | 浏览364

有人帮忙看看代码吗?最后两个测试点显示段错误

#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条回帖

回帖
加载中...
话题 回帖

本文相关内容

近期热帖

等你来战

查看全部

热门推荐