模板 - 字符串 - 哈希
传说中的大名鼎鼎的DJB哈希(谐音?)
ll DJBhash(){ ll hash=5381; int l=strlen(s); for(int i=0;i<l;i++){ hash=((hash<<5)+hash)+s[i]; } return hash; }
配套一个map使用就可以了,碰撞概率很低。
#include<bits/stdc++.h> using namespace std; #define ll long long int n; char s[1505]; map<ll,int> m; ll DJBhash(){ ll hash=5381; int l=strlen(s); for(int i=0;i<l;i++){ hash=((hash<<5)+hash)+s[i]; } return hash; } int main(){ scanf("%d",&n); while(n--){ scanf("%s",s); ll res=DJBhash(); m[res]++; } printf("%u\n",m.size()); }