首页 > 其他分享 >P3370 【模板】字符串哈希

P3370 【模板】字符串哈希

时间:2024-10-27 16:48:48浏览次数:3  
标签:str int leq P3370 哈希 字符串 模板 1000

【模板】字符串哈希

题目描述

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

友情提醒:如果真的想好好练习哈希的话,请自觉。

输入格式

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

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

输出格式

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

样例 #1

样例输入 #1

5
abc
aaaa
abc
abcc
12345

样例输出 #1

4

提示

对于 30 % 30\% 30% 的数据: N ≤ 10 N\leq 10 N≤10, M i ≈ 6 M_i≈6 Mi​≈6, M m a x ≤ 15 Mmax\leq 15 Mmax≤15。

对于 70 % 70\% 70% 的数据: N ≤ 1000 N\leq 1000 N≤1000, M i ≈ 100 M_i≈100 Mi​≈100, M m a x ≤ 150 Mmax\leq 150 Mmax≤150。

对于 100 % 100\% 100% 的数据: N ≤ 10000 N\leq 10000 N≤10000, M i ≈ 1000 M_i≈1000 Mi​≈1000, M m a x ≤ 1500 Mmax\leq 1500 Mmax≤1500。

样例说明:

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

题目解析:

具体可以参考一下博客 一个是关于哈希表的介绍哈希表

另一个是关于哈希表的基本模版字符串哈希

这个题目与字符串哈希类似 或者比起更简单一点 这个不需要去求出每一个点对应的p进制数字 直接去求一整个字符串对应的哈希值 进行去比较

代码

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

const int N = 10010,P= 131;
int n = 1010;

typedef unsigned long long ULL;

int h[N];//记录每一个字符的哈希值

int x[N];//记录不同数组所对应的哈希值  最后进行比较使用的

char str[N];//存储每一个字符串

ULL get(char str[])
{
	int len = strlen(str);
	for (int i = 1; i <= len; i++)
	{
		h[i] = h[i - 1]*P + str[i];
	}
	return h[len];
}

int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> str;
		x[i] = get(str);//记录输入的字符串对应的hash值
	}
	sort(x + 1,x+n+1);

	int ans = 1;
	for (int i = 1; i < n; i++)
	{
		if (x[i] != x[i + 1]) ans++;
	}
	cout << ans;

	return 0;
}

标签:str,int,leq,P3370,哈希,字符串,模板,1000
From: https://blog.csdn.net/weixin_73378557/article/details/143270255

相关文章

  • 7、哈希表
    7、哈希表哈希表最主要的作用就是把一个比较庞大的空间或者值域映射到比较小的值域(0-n)就是将-10^9~10^9映射到0~10^5一、存储结构映射的方法可以是h(x)=xmod10^5但是这样映射会出现一个问题可能会有重复的数字出现所以就引出了两个方法开放寻址法和......
  • 解析 Vue 模板的本质:从语法糖到渲染过程
    大家耳熟能详的表述如下:Vue模板的本质其实是一种声明式渲染的形式,它在开发过程中提供了将组件的结构与逻辑分离的便利。也就是说,模板template的存在只是为了让我们以更直观的方式描述界面的结构,然而在运行时,模板其实是不存在的,它在底层会被Vue编译为更高效的渲染函数......
  • PbootCMS模板当前栏目标签
    当前栏目标签适用范围:在列表页或详情页使用。标签作用:用于输出当前栏目的相关信息。示例代码:html {sort:tcode}当前栏目的顶级栏目编码{sort:topname}当前栏目的顶级栏目名称{sort:toplink}当前栏目的顶级栏目链接{sort:pcode}当前栏目的父栏目编码{sort:parentname......
  • Ajax:表单 & 模板引擎
    Ajax:表单&模板引擎form表单form属性Ajax操控表单事件监听阻止默认行为收集表单数据模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器原理form表单在HTML中,可以通过<form>创建一个表单,收集用户信息。而采集到的信息想要发送给后端,此时就要与Aj......
  • CSP-S可能出现的模板(手抄版)
    CSP-Srp+++++++++++ǰ����ʾ,��ƪ���´���ע��~��ѧ������intksm(inta,intb,intp){intret=1;while(b){if(b&1)ret=(ret*a)%p;a=(a*a)%p;b=b>>1;}returnret;}//b��λö�������λΪ1�������aÿ��a�˷�Lucasint......
  • pbootcms模板上线推广百度竞价后打不开网站出现404错误
    PbootCMSV3.2.5版本中为了增强安全性或优化URL结构,加入了对URL参数的严格判断。当URL中包含?但不符合特定条件(如/?tag=、/?page=、/?ext_)时,系统会自动返回404错误页面。这种做法虽然有助于防止一些非法请求,但也可能导致合法的请求被误判为无效,特别是对于那些依赖于其他查询参数......
  • CSP-S 可能出现的模板(非原创,各个地方整理得)
    CSP-Srp+++++++++++数据结构~01trie~intt[N*31][2],nv=1;voidbuild(intp,intd,intv){ boolflag=(v&(1<<d)); if(!t[p][flag])t[p][flag]=++nv; if(d)build(t[p][flag],d-1,v);}intquery(intp,intd,intv){ if(d<0)return0; boolflag=(v&am......
  • Tarjan连通性算法模板大整合
    更新日志前言由于Tarjan算法页面过多,这里统一做一个整合,后期可能还会加入或者更改这里的模板。另外的,这个页面只提供模板——以及链接,详细讲解点链接即可。强连通(有向图,储存每个节点属于的分量编号)intscnt;intscc[N],siz[N];intdcnt;intdfn[N],low[N];boolins[N......
  • C++之内存管理与模板初级
    内容介绍Ⅰ.C++内存管理1.C/C++内存分布2.C与C++动态内存管理方式对比2.1C中动态内存管理方式2.2C++中内存管理方式3.new和delete的底层实现原理(了解)Ⅱ.模板初阶1.模板介绍2.函数模板3.函数模板参数匹配原则4.类模板Ⅰ.C++内存管理1.C/C++内存分布intn1=1;......
  • 「哈希表」是什么,有哪些常用的解决冲突的方法
    哈希表(HashTable),也被称为散列表,是一种数据结构,用于实现关联数组(AssociativeArray)或映射(Map)这样的抽象数据类型。常用的解决哈希表冲突的方法:1.链地址法(SeparateChAIning);2.开放寻址法(OpenAddressing);3.线性探查(LinearProbing)等。一、哈希表是什么哈希表(HashTable),也被称......