zoukankan      html  css  js  c++  java
  • 字符串hash

    这个总结写的不错。。

    思路比较简单,就是弄两个素数,然后搞一个base,根据base进制对字符串进行取模,搞出来两个数,然后比较时根据两个数来比较。只要有一个不同就是不同。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <utility>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int maxn=1e5+5, maxm=1505;
     8 const int seed=233;
     9 const int p1=1e7+7, p2=1e9+7;
    10 int n;
    11 char s[maxm];
    12 pair<int, int> a[maxn];
    13 
    14 bool cmp(pair<int, int> a, pair<int, int> b){
    15     return a.first<b.first;
    16 }
    17 
    18 pair<int, int> get_hash(char *s){
    19     long long ans1=0, ans2=0;
    20     for (int i=0; s[i]!=''; ++i){
    21         ans1=(ans1*seed+s[i])%p1;
    22         ans2=(ans2*seed+s[i])%p2;
    23     }
    24     return make_pair(ans1, ans2);
    25 }
    26 
    27 int main(){
    28     scanf("%d", &n);
    29     for (int i=0; i<n; ++i){
    30         scanf("%s", s);
    31         a[i]=get_hash(s);
    32     }
    33     sort(a, a+n, cmp);
    34     int ans=1; //这里要是1,因为本来就有一个字符串。。
    35     for (int i=1; i<n; ++i)
    36         if (a[i].first!=a[i-1].first||
    37                 a[i].second!=a[i-1].second)
    38             ++ans;
    39     printf("%d
    ", ans);
    40 }

    #include<cstdio>

    #include<cstring>
    #include<utility>
    #include<algorithm>
    usingnamespacestd;
    
    
    constintmaxn=1e5+5,maxm=1505;
    constintseed=233;
    constintp1=1e7+7,p2=1e9+7;
    intn;
    chars[maxm];
    pair<int,int>a[maxn];
    
    
    boolcmp(pair<int,int>a,pair<int,int>b){
    returna.first<b.first;
    }
    
    
    pair<int,int>get_hash(char*s){
    longlongans1=0,ans2=0;
    for(inti=0;s[i]!='';++i){
    ans1=(ans1*seed+s[i])%p1;
    ans2=(ans2*seed+s[i])%p2;
    }
    returnmake_pair(ans1,ans2);
    }
    
    
    intmain(){
    scanf("%d",&n);
    for(inti=0;i<n;++i){
    scanf("%s",s);
    a[i]=get_hash(s);
    }
    sort(a,a+n,cmp);
    intans=1;//这里要是1,因为本来就有一个字符串。。
    for(inti=1;i<n;++i)
    if(a[i].first!=a[i-1].first||
    a[i].second!=a[i-1].second)
    ++ans;
    printf("%d
    ",ans);
    }
    
    
  • 相关阅读:
    Java 流(Stream)、文件(File)和IO
    归并排序(Java)
    TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
    动态规划—矩阵链乘法
    SQL Server 行列转换
    dropdownlist无刷新传值
    ASP.NET在主题中添加CSS文件
    asp.net网站后台退出后,点后退按钮仍能进,如何安全退出
    下拉框数据绑定两种方式
    win7安装IIS及将网站发布到IIS上
  • 原文地址:https://www.cnblogs.com/MyNameIsPc/p/7476834.html
Copyright © 2011-2022 走看看