P3370 模板字符串哈希

Posted 小时のblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3370 模板字符串哈希相关的知识,希望对你有一定的参考价值。

传送门

题目大意

求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 模板字符串哈希的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P3370 模板字符串哈希

P3370 模板字符串哈希

[洛谷P3370]模板字符串哈希

P3370 模板字符串哈希

洛谷 P3370 模板字符串哈希

P3370 模板字符串哈希