zoukankan      html  css  js  c++  java
  • 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
    ",t.size());
        return 0;
    }
  • 相关阅读:
    ES6入门详解(二) 解构赋值
    python 入门简述
    webpack4x 简述
    ES6入门详解(一) let const
    关于HTML的简述
    按照in条件排序
    Oracle 优化效率
    input输入框校验
    <a>标签操作
    svn安装
  • 原文地址:https://www.cnblogs.com/zzyh/p/7260311.html
Copyright © 2011-2022 走看看