0

使用 1000000007 进行散列后,以下代码未提供所需的输出。

使用 101 进行散列可以使其正常工作。你能帮我找出我出错的地方吗?

#include<bits/stdc++.h>
using namespace std;
typedef vector< int > vi;
typedef vector< vi > vvi;
typedef pair< int,int > ii;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define sz(a) int((a).size())
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define tr(c,i) for(typeof((c)).begin() i = (c).begin(); i != (c).end(); i++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())

int val(char s)
{
        return int(s)-int('A')+1;
}
void robinkarp(string text,string compare,int q)
{
    int hashofcompare=0;
    int windowhash=0;
    int valchanger=1;
    for(int i=0;i<compare.size();i++)
    {
        hashofcompare=(hashofcompare*26+val(compare[i]))%q;
        windowhash=(windowhash*26+val(text[i]))%q;
        if(i!=0)
            valchanger=(valchanger*26)%q;
    }
    for(int i=0;i<=text.size()-compare.size();i++)
    {
        if(windowhash==hashofcompare)
        {
            int j=0;
            for(;j<compare.size();j++)
            {
                if(val(compare[j])!=val(text[i+j]))
                    break;
            }
            if(j==compare.size())
                cout<<"Found at:"<<i+1<<"\n";
        }
        if(i!=text.size()-compare.size())
            windowhash=(26*((windowhash-valchanger*(val(text[i])))%q)+val(text[i+compare.size()]))%q;
        windowhash=(windowhash+q)%q;
    }
}
int main()
{
    string text;
    cin>>text;
    string compare;
    cin>>compare;
    int prime=1000000009;
    cout<<prime;
    robinkarp(text,compare,prime);

}

没有显示输入案例的输出:deeeeeeeeeeeeeeeeeee 和 eeeeeeeeeeee。

4

0 回答 0