题目来源 :YbtOJ
「字符串算法」第2章 Hash 和 Hash 表课堂过关题面链接
解题思路
这道题是字符串哈希的模板题, 通过哈希函数来统计有了的字符串
Code
#include <bits/stdc++.h>
#define MOD 100000007
#define N 13313
#define ll long long
using namespace std;
int n, ans;
string s, hd[N];
int hash ()
{
ll len = s.length (), hhd = 0;
for (int i = 0; i < len; ++ i)
hhd = (hhd * 67 % MOD + int (s[i])) % MOD;
hhd %= N;
if (hd[hhd] == s) return 1;
if (hd[hhd] != "")
{
ll i = hhd + 1;
i %= N;
while (i != hhd)
{
if (hd[i] == s) return 1;
if (hd[i] == "")
{
hd[i] = s;
return 0;
}
i = (i + 1) % N;
}
}
hd[hhd] = s;
return 0;
}
int main ()
{
scanf ("%d", &n);
for (int i = 1; i <= n; ++ i)
{
cin >> s;
if (!hash ()) ans ++;
}
printf ("%d", ans);
return 0;
}