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

20251115 - Hash 总结

你说得对,但我几乎从来不把哈希叫做哈希,我习惯了叫 Hash。

比赛链接:https://vjudge.net/contest/766880。

卡 Hash 的出题人都是毒瘤出题人喵!一点也不良心。

A - Barn Echoes G

由于这个长度只有 \(80\),因此随便枚举然后 Hash 判断一下就可以了。甚至都可以不用 Hash,直接判断,但是出于对这道题目的尊重我还是使用了 Hash,为了练习嘛。

B - 字符串哈希

Hash 板题。对每个字符串进行 Hash 然后丢进 map 判断或者数组排序去重,取 size 什么的即可。

C - 阅读理解

map 不好玩。

\(n\)set,针对每篇文章把它所出现的字符串 Hash 之后丢进去,查找的时候枚举每篇文章然后在对应的 set 里面 count 就可以啦。

所以为什么要卡 map 呢。

D - 倒排索引

比较暴力的一个题,首先去枚举那个查询词 \(q\) 的所有拆出来的子串,Hash 后丢进 map 里标记上。接着枚举每个单词然后挨个去跑,装上了 map 里有的就增加答案就行了。

E - Colliding Encoding

按照他那个也许错误的神秘映射方法算出一个“Hash”值,然后再用正常的 Hash 再算一个,扔 map 里匹配即可。注意他那里边是有 \(0\) 的,如果作为开头可能会误判,考虑每个串前面加个 \(1\) 或者别的数,这样所谓前导零就能看得到了。

F - 于是他错误的点名开始了

随便 Hash,丢 map 里算个数就好了。

G - 匹配统计

顺着做一个 Hash,反过来做一个 Hash,以便求正着或者反着的区间 Hash 值。然后二分找,Hash 截取判相等,就可以啦!

H - ABB

你说得对,但我真的很想用 KMP 水掉这题。

和上一题一样的套路,不过这里判的是回文,且最后的答案需要推一个简单的小公式。以及注意回文长度,偶数和奇数是两种不同的情况喔!

I - 积木小赛

一开始几乎就是,一个双指针的套路,枚举 Bob 的情况然后指针跑去找 Alice 行不行得通。那么 Hash 用在哪了呢?就是最后的判重啦!不过,这里不能用 map,会被卡 /ll 所以我们只能使用排序去重,或者是 umap 等别的速度快些的东西。

J - ANT-Antisymmetry

异式的判回文,不过原理是一样的。和 G 类似,正反两遍 Hash,不过这里需要选择一遍(正反均可)做“反 Hash”——说人话就是,\(0\) 当做 \(1\) 去压,\(1\) 当做 \(0\) 去压。与 G 不同的是,这里肯定是偶数,不信你可以自己试试看,举出反例算我输!其实我已经把这个东西证明了,但是不想写,所以你无论如何都写不出反例的!

K - Censoring S

Hash 情况扔栈里做类似模拟的操作,去模拟这个过程,一删就删一大把,衔接算 Hash 的时候要删掉首位加上末位。记录一下哪些位置没删,遍历输出即可。

Hash 总结

Hash 是一个非常方便好用的字符串算法,多用于字符串比较、字符串匹配类型的题目。它可以将字符串的 \(O(len)\) 操作通过预处理降到 \(O(1)\),高效又简洁。但是其正确性无法做到严格保障,虽然说概率通常不高,但是也不能排除出现 Hash 冲突的情况——这个时候,你可以选择更大更保险更冷门的模数(选冷门是因为怕有人对着常用模数卡),或者多做几个不同的 Hash 给正确性套上多层保障,甚至有时候需要上随机数 Hash 这类玄学东西。总而言之,Hash 是一个很赞的字符串算法哟!

说这么多,你不是照样没在 25 S 考场上给 C 打 Hash 的暴力。

Thanks reading.

http://www.jsqmd.com/news/41269/

相关文章:

  • BZOJ2372 music
  • P11664 [JOI 2025 Final] 缆车 / Mi Telefrico
  • WPF中RelayCommand的完成与使用详解
  • C++篇(14)二叉树进阶算法题 - 详解
  • Python 潮流周刊#127:Python 3.16 JIT 性能提升计划
  • 非线性序列密码结构
  • 2025/11/15
  • LoongOS 上传文件
  • 基础设施即服务(IaaS)全面解析:云计算的基石
  • CentOS 7 通过 Packstack 安装 OpenStack Train 完整步骤
  • 【STM32工程开源】基于STM32的人体健康监测环境
  • 实用指南:【C# OOP 入门到精通】从基础概念到 MVC 实战(含 SOLID 原则与完整代码)
  • tailwind自定义class问题小记
  • 2025年主流开源AI智能体框架平台概览 - 实践
  • threading.local()的实例化机制
  • Tarjan复建
  • 采用git进行项目管理
  • Golang游戏开发笔记:地图索引系统实现
  • 20251115
  • 网络爬虫:简单静/动态网页
  • 20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • EXECUTE IMMEDIATE语句分析
  • 产品更新与重构策略:创新与稳定的平衡之道 - 详解
  • MySQL MVCC实现原理
  • 算法第三次作业
  • 算法第三次作业
  • 完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》
  • 计算机网络5 - 指南
  • 2025年境外商务出差保险哪里有卖:TOP10平台专业解析
  • 2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!