题意:
给定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;
}