• 【模板】字符串哈希


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

    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;
    }
    
  • 相关阅读:
    AI听说读写
    C#文件夹检测与创建
    全球唯一标识符 System.Guid.NewGuid().ToString();
    mssql不允许删表方法
    SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具
    sql语句精剪数据长度函数substring(string,int,int)
    代码生成工具
    [Java123] POI CellType 数据类型
    FRM二级备考感想
    【Java123】XML与JSON互相转化
  • 原文地址:https://www.cnblogs.com/Kan-kiz/p/10642019.html
Copyright © 2020-2023  润新知