哈希
把大的数映射到小的区间内
代码因要求而异
P3370 【模板】字符串哈希
`
include<bits/stdc++.h>
namespace sb=std;
using namespace sb;
unsigned long long base=131;
unsigned long long a[10010];
char s[10010];
int n,ans=1;
int prime=233317;
unsigned long long mod=212370440130137957ll;
unsigned long long hashe(char s[]){
int len=strlen(s);
unsigned long long ans=0;
for (int i=0;i<len;i++)
ans=(ans*base+(unsigned long long)s[i])%mod+prime;
return ans;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
a[i]=hashe(s);
}
sort(a+1,a+n+1);
for(int i=1;i<n;i++){
if(a[i]!=a[i+1])
ans++;
}
cout<<ans;
int =0;
return (__);
}
`