洛谷 P3370 【模板】字符串哈希

思想就是把设置一个进制把字符串转化成一个数,进制和取模要互质。

// 单哈希
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 10010
#define M 212370440130137957ll
using namespace std;
typedef unsigned long long ull;
int n,res=1;
ull base=131,prime=233317,a[MAXN];
char s[MAXN];
ull hashe(char *s){
    int len=strlen(s);
    ull res=0;
    for(int i=0;i<len;i++)
        res=(res*base+(ull)s[i])%M+prime;
    return res;
}
int main(){
#ifdef WINE
    freopen("data.in","r",stdin);
#endif
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf(" %s ",s);
        a[i]=hashe(s);
    }
    sort(a+1,a+n+1);
    for(int i=1;i<n;i++)
        if(a[i]!=a[i+1])res++;
    printf("%d\n",res);
    return 0;
}

posted @ 2020-07-11 19:34  winechord  阅读(96)  评论(0编辑  收藏  举报