字符串hash(4hash)模板

    xiaoxiao2021-12-01  18

    #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> typedef unsigned long long ull; using namespace std; const long long h1=998244353,h2=1000000007,h3=2147483647,h4=999971; struct T{ unsigned long long hh1,hh2,hh3,hh4; }t[10000+10]; char s[3000]; ull hash1(char *s,int len){ ull ans=0; for(int i=0;i<len;i++){ ans=ans*h1+s[i]; } return ans; } ull hash2(char *s,int len){ ull ans=0; for(int i=0;i<len;i++){ ans=ans*h2+s[i]; } return ans; } ull hash3(char *s,int len){ ull ans=0; for(int i=0;i<len;i++){ ans=ans*h3+s[i]; } return ans; } ull hash4(char *s,int len){ ull ans=0; for(int i=0;i<len;i++){ ans=ans*h4+s[i]; } return ans; } bool cmp(T u,T v){ return u.hh1<v.hh1; } int main(){ int i,j,k,m,n; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%s",s); int len=strlen(s); t[i].hh1=hash1(s,len),t[i].hh2=hash2(s,len),t[i].hh3=hash3(s,len),t[i].hh4=hash4(s,len); } int ans=0; sort(t+1,t+1+n,cmp); for(i=1;i<=n;i++){ while(t[i].hh1==t[i+1].hh1){ if(t[i].hh2==t[i+1].hh2){ if(t[i].hh3==t[i+1].hh3){ if(t[i].hh4==t[i+1].hh4){ i++; } } } } ans++; } printf("%d",ans); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-679313.html

    最新回复(0)