自然溢出哈希
typedef unsigned long long ull;
ull base = 131;
ull hashe(char s[]){
ull ans = 0;
int len = strlen(s);
for(int i = 0;i < len;i ++)
ans = ans * base + (ull) s[i];
return ans & 0x7fffffff;
}
单模数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod = 19260817;
ull hashe(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod;
return ans;
}
双模数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod1 = 19260817;
ull mod2 = 19660813;
ull hash1(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod1;
return ans;
}
ull hash2(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod2;
return ans;
}
大数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod = 212370440130137957ll;
ull hashe(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod;
return ans;
}
好像双模数哈希比较难被卡掉