(模板)哈希
树下
2018-11-01 20:44:11
```cpp
#include<bits/stdc++.h>
#define bs 43
using namespace std;
const int moda=99999989;
const int modb=99999971;
char s[2000];
int len,n;
int a[10005],b[10005];
struct sjy{
int a,b;
}h[10005];
int cmp(const sjy&c,const sjy&y){
if(c.a<y.a) return 1;
return 0;
}
int hasha(){
len=strlen(s);
int ans=0;
for(int i=1;i<len;i++){
if(s[i]<='9'&&s[i]>='0')
s[i]-='0'+1;
else if(s[i]<='z'&&s[i]>='a')
s[i]-='a'+11;
else
s[i]-='A'+37;
ans=(ans*bs+s[i])%moda;
}
return ans;
}
int hashb(){
int ans=0;
for(int i=1;i<len;i++)
ans=(ans*bs+s[i])%modb;
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
memset(s,0,sizeof(0));
cin>>s;
h[i].a=hasha();
h[i].b=hashb();
}
sort(h+1,h+n+1,cmp);
int ans=1;
for(int i=2;i<=n;i++)
if(h[i].a!=h[i-1].a||(h[i].a==h[i-1].a&&h[i].b!=h[i-1].b))
ans++;
printf("%d",ans);
}
```