码迷,mamicode.com
首页 > 其他好文 > 详细

P3370 【模板】字符串哈希

时间:2017-07-30 21:07:42      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:eal   hash   mem   print   blank   代码   个数   不同   fine   

传送门

题目大意

求n个字符串不同的个数

题解

hash模板 1LL强制转换成long long

代码

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<set> 
#include<cstring>
using namespace std;
//#define mod 1e9+7//不能这样宏定义 
const int mod=1e9+7;
#define D 131
#define M 2333+7
long long n,g[M],f[M];
string s;
set<long long>t;
void predeal(int x){
    //memset(f,0,sizeof(f));
    //memset(g,0,sizeof(g));
    f[0]=s[0];
    for(int i=1;i<=x;i++)
        f[i]=(1LL*f[i-1]*D+s[i-1])%mod;
    g[0]=1;
    for(int i=1;i<=x;i++)
        g[i]=1ll*g[i-1]*D%mod;
}
int Hash(int l,int r){
    long long a=f[r],b=1LL*f[l-1]*g[r-l+1]%mod;
    return (a-b+mod)%mod; 
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        cin>>s;
        long long len=s.length();
        predeal(len);
        long long k=Hash(1,len);
        t.insert(k);
    }
    printf("%lld\n",t.size());
    return 0;
}

 

P3370 【模板】字符串哈希

标签:eal   hash   mem   print   blank   代码   个数   不同   fine   

原文地址:http://www.cnblogs.com/zzyh/p/7260311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!