#include<bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define INFLL 0x3f3f3f3f3f3f
#define ULL unsigned long long
using namespace std;
const int maxn = 120000+50;
string s[maxn];
int H_head[maxn];
int H_next[maxn];
int H_rear;
string word[maxn];
void init()
{
memset(H_head,-1,sizeof(H_head));
memset(H_next,-1,sizeof(H_next));
H_rear = 0;
}
int Hash(string s)
{
int ret = 0;
for(int i = 0;i<s.size();i++){
ret = ret * 131 + s[i];
}
return (ret & 0x7fffffff) % 111117;//小于长度的最大素数
}
int add(string s)
{
int h = Hash(s);
for(int i = H_head[h] ; ~i ; i = H_next[i]){
if(word[i]==s) return 0;
}
word[H_rear] = s;
H_next[H_rear] = H_head[h];
H_head[h] = H_rear++;
return 0;
}
int query(string s)
{
int h = Hash(s);
for(int i = H_head[h] ; ~i ; i = H_next[i]){
if(word[i]==s) return 1;
}
return 0;
}
一维字符串hash模板
最新推荐文章于 2024-05-27 11:10:47 发布