zoukankan      html  css  js  c++  java
  • 字符串哈希

    哈(luan)希(gao)简单来说就是把一整个字符串映射到一个整数中

    过程可以这样表示:hash[i]=(hash[i-1]*HASH+num(s[i]))%mod;

    一般情况下我们为了保险起见一般使用双哈希

    真没什么好说的了,上模板吧

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    const long long mod1=13131;
    const long long mod2=131313;
    const long long hash=1e9+7;
    bool have1[mod1+3],have2[mod2+3];
    int main()
    {     long long n,m,i,j,k,sum=0;
          cin>>n;
          for(i=1;i<=n;i++){
              string s;
              cin>>s;
              m=s.length();
              long long hh1=1,hh2=1;
              for(j=0;j<m;j++){
                  hh1=(hh1*hash%mod1+(s[j]-'0')%mod1)%mod1;
                  hh2=(hh2*hash%mod2+(s[j]-'0')%mod2)%mod2;
              }
              if(!have1[hh1]||!have2[hh2])sum++,have1[hh1]=1,have2[hh2]=1;
          }
          cout<<sum<<endl;
          return 0;
    }
    哈希这种东西比较玄学,还需体会精神

    可用的哈希数有很多,详见我博客推荐的第二篇

  • 相关阅读:
    端口号被占用怎么办
    cxgrid动态显示行号
    SQL事件探查器后无法暂停及停止
    互联网电视音视频编码规范
    视频服务之ffmpeg部署
    如何远程连接AWSEC2实例
    测试kernel.pid_max值
    ffmpeg常用命令
    视频服务之(直播&点播)
    视频服务之在线教育系统BigBlueButton
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/7881705.html
Copyright © 2011-2022 走看看