zoukankan      html  css  js  c++  java
  • 【模板】字符串哈希

    我对于字符串哈希的理解。。。可能就是一个神奇的函数把一个字符串转化成一个数吧(

    hy:比如说现在有一个字符串orzc 枚举这个字符串的每一位,与base相乘得到ans,然后mod一下,就得到orzc的哈希值

    这只是字符串哈希的一种写法……(这种写法正确性客观来说是非常高的)

    也就是说哈希函数是可以自己定义的。

    这里用到的是自然溢出。计算机内部是怎么处理自然溢出的大概不在我们的学习范围内……??

    自然溢出大概是指-->(unsigned long long)在超出存储的最大上限之后会以某种玄学的方式自动(mod)掉某数……

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #define MAXN 10005
    #define base 107
    #define scanf(a) scanf("%lld",&a)
    #define print(a) printf("%lld",a)
    #define printn(a) printf("%d
    ",&a);
    using namespace std;
    long long n,m;
    int f[MAXN];
    unsigned long long hash(string s)
    {
    	unsigned long long ans=0,len=s.size();
    	for (long long i=0;i<len;i++)
    	{
    		ans=base*ans+(unsigned long long)s[i];
    	}
    	return ans;
    }
    void init()
    {
    	scanf(n);
    	string s;
    	for (long long i=1;i<=n;i++)
    	{
    		cin>>s;
    		f[i]=hash(s);
    	}
    	sort(f+1,f+n+1);
    }
    void start()
    {
    	long long ans=0;
    	for (int i=1;i<=n;i++)
    	{
    		if (f[i]!=f[i-1])
    		{
    			ans++;
    		}
    	}
    	print(ans);
    }
    int main()
    {
    	init();
    	start();
    	return 0;
    }
    
  • 相关阅读:
    [Python]计算豆瓣电影TOP250的平均得分
    [Golang]使用自建代理访问指定网站
    HDU 2689.Sort it-冒泡排序
    HDU 1728.逃离迷宫-BFS
    hihoCoder #1498.Diligent Robots
    POJ 2503.Babelfish-sscanf()函数+strcmp()函数+二分
    Codeforces 608 B. Hamming Distance Sum-前缀和
    Codeforces 608 A. Saitama Destroys Hotel
    sscanf()函数
    UVA 11461.Square Numbers
  • 原文地址:https://www.cnblogs.com/Kan-kiz/p/10642019.html
Copyright © 2011-2022 走看看