(模板)哈希

树下

2018-11-01 20:44:11

Personal

```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); } ```