当前位置: 首页 > news >正文

【题解-洛谷】P3370 【模板】字符串哈希

P3370 【模板】字符串哈希

题目描述

如题,给定 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 N10 M i ≈ 6 M_i≈6 Mi6 M max ⁡ ≤ 15 M_{\max}\leq 15 Mmax15

对于 70 % 70\% 70% 的数据: N ≤ 1000 N\leq 1000 N1000 M i ≈ 100 M_i≈100 Mi100 M max ⁡ ≤ 150 M_{\max}\leq 150 Mmax150

对于 100 % 100\% 100% 的数据: N ≤ 10000 N\leq 10000 N10000 M i ≈ 1000 M_i≈1000 Mi1000 M max ⁡ ≤ 1500 M_{\max}\leq 1500 Mmax1500

样例说明

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

拓展阅读

以下的一些试题从不同层面体现出了字符串哈希算法的正确性分析。

  • P12197 Hash Killer I
  • P12198 Hash Killer II
  • P12199 (目前无解)Hash Killer III
  • P12200 Hash Killer Extra
  • P12201 Hash Killer Phantasm
  • P7350 「MCOI-04」Dream and Strings

代码

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;typedef unsigned long long ULL;const int MaxM = 1500 + 10, MaxN = 10000 + 10, P = 131;int N;
char str[MaxM];
ULL p[MaxN], h[MaxN], a[MaxN];ULL hashh(char str[]){memset(p, 0, sizeof p);memset(h, 0, sizeof h);p[0] = 1;int len = 0;for(int i = 1; str[i]; i ++){p[i] = p[i - 1] * P;h[i] = h[i - 1] * P + str[i];len ++;}int r = len;int l = 1;return h[r] - h[l - 1] * p[r - l + 1];
}int main(){scanf("%d", &N);for(int i = 0; i < N; i ++){scanf("%s", str + 1);a[i] = hashh(str);}sort(a, a + N);int sum = 1;for(int i = 1; i < N; i ++){if(a[i] != a[i - 1]){sum ++;}}printf("%d", sum);return 0;
}

结果

在这里插入图片描述
在这里插入图片描述

相关文章:

  • Docker + Nginx + Logrotate 日志管理与轮换实践
  • YUM仓库编译出现`conflicting requests`问题解决方案
  • Linux系统安装Docker
  • Python 构建法律DeepSeek RAG
  • YOLO训练保持原有识别能力
  • Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
  • 宝塔think PHP8 安装使用FFmpeg 视频上传
  • 数据结构之常用排序算法(冒泡、选择等)
  • 以STM32H7微控制器为例,简要说明stm32h7xx_it.c的作用
  • 主流 AI IDE 之一的 Cursor 介绍
  • mysql+keepalived
  • C#中的CLR属性、依赖属性与附加属性
  • 《零基础读懂新能源汽车》—— 新能源汽车充电革命:从逆变器原理到800V超充实战,一篇全掌握!
  • Python训练营打卡Day46(2025.6.6)
  • 【React】React 18 并发特性
  • 我爱学算法之—— 前缀和(中)
  • Spring Cloud 2025.0.0 Gateway迁移全过程详解
  • 文件上传漏洞深度解析:检测与绕过技术矩阵
  • Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题
  • 力扣100-移动0
  • 企业网站建设管理系统/网店运营基础知识
  • 企业营销型网站类型/软文有哪些推广渠道
  • 临汾网站开发/营销是什么意思
  • 做网站和做app那个简单/网站维护收费标准
  • 一家专门做代购的网站/百度推广登录入口下载
  • 医院做网站的费用多少/短视频培训