题目链接:P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态
题目难度:普及
解题思路:利用哈希算法,将每一个字符串映射到一个值域较小、可以方便比较的数,然后将哈希值存入到set(不能有重复元素),最后输出set的大小。
代码部分:
#include<bits/stdc++.h>//万能头文件
using namespace std;
typedef unsigned long long ULL;
const int N = 100010,P = 131;
int n;
ULL h[N];
char s[N];
set<ULL>st;
int get_hash(char s[])//哈希函数
{
h[0] = 0;
int len = strlen(s);
for(int i=0; i<len; i++)
{
h[i + 1] = h[i] * P + s[i];
}
return h[len];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
while(n--)//读入
{
cin >> s;
st.insert(get_hash(s));//插入set中
}
cout<<st.size();
return 0;
}