luogu#P3370 字符串哈希

题意:

​ 给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,),请求出N个字符串中共有多少个不同的字符串。

解法:

​ 哈希

单哈希会无法通过 据说可以用一个很大的质数通过
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int kh=233;
struct node{int q,w;}ans[10005];
bool cmp(const node& x,const node& y){return x.q<y.q;}
string a;
int n;

inline int hsh(string x,int h);
int main()
{
	int cnt=0;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		ans[i].q=hsh(a,19260817);
		ans[i].w=hsh(a,19260813);
	}
	sort(ans+1,ans+n+1,cmp);
	for(int i=1;i<=n;i++)
		if(ans[i].q!=ans[i+1].q||ans[i].w!=ans[i+1].w)
			cnt++;
	cout<<cnt;
	return 0;
}
inline int hsh(string x,int h)
{
	int re=0;
	for(int i=0;i<x.size();i++)
		re=(re*kh+x[i])%h;
	return re%h;
}
posted @ 2019-10-09 21:34  nenT  阅读(103)  评论(0)    收藏  举报