ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串哈希笔记

2022-05-25 22:02:08  阅读:125  来源: 互联网

标签:abc int 样例 笔记 leq 哈希 字符串


字符串哈希

基础知识

字符串哈希 - OI Wiki (oi-wiki.org)

哈希碰撞

大白话解释hash碰撞是什么以及如何解决

【模板】字符串哈希

题目描述

如题,给定 N 个字符串(第 i 个字符串长度为 Mi,字符串内包含数字、大小写字母,大小写敏感),请求出 N 个字符串中共有多少个不同的字符串。

友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转PJ试炼场:)

输入格式

第一行包含一个整数 N,为字符串的个数。

接下来 N 行每行包含一个字符串,为所提供的字符串。

输出格式

输出包含一行,包含一个整数,为不同的字符串个数。

样例 #1

样例输入 #1

5
abc
aaaa
abc
abcc
12345

样例输出 #1

4

提示

\[对于 30\% 的数据:N\leq 10,M_i≈6,Mmax\leq 15。 \]

\[对于 70\% 的数据:N\leq 1000,M_i≈100,Mmax\leq 150。 \]

\[对于 100\% 的数据:N\leq 10000,M_i≈1000,Mmax\leq 1500。 \]

样例说明:

样例中第一个字符串(abc)和第三个字符串(abc)是一样的,所以所提供字符串的集合为{aaaa,abc,abcc,12345},故共计4个不同的字符串。

Tip:
感兴趣的话,你们可以先看一看以下三题:

BZOJ3097:http://www.lydsy.com/JudgeOnline/problem.php?id=3097

BZOJ3098:http://www.lydsy.com/JudgeOnline/problem.php?id=3098

BZOJ3099:http://www.lydsy.com/JudgeOnline/problem.php?id=3099

如果你仔细研究过了(或者至少仔细看过AC人数的话),我想你一定会明白字符串哈希的正确姿势的_

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 1e9 + 7;
const int B = 233;
ll hashNum;
set<ll>ds;
int main()
{
	string str;
	int t;
	cin >> t;
	for (int j = 1; j <= t; j++) {
		cin >> str;
		hashNum = 0;
		for (int i = 0; i < str.length(); i++) {
			hashNum = (ll)(hashNum * B + str[i]) % M;
		}
			ds.insert(hashNum);
	}
	cout << ds.size() << endl;
	return 0;
}

遇到哈希碰撞?

当B=7时WA第9个测试点:Answer9520//out_put9519

当B=233时WA最后一个测试点:Answer9142//out_put9141

当B=19260817AC

标签:abc,int,样例,笔记,leq,哈希,字符串
来源: https://www.cnblogs.com/cloudcat233/p/16311098.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有