【算法笔记+POJ3461】Oulipo(字符串hash模版)
学习笔记:
详细讲解:https://blog.csdn.net/pengwill97/article/details/80879387
字符串hash:
利用unsigned long long的范围自然溢出,相当于自动对2^64−1取模
单Hash公式:
hash[i]=(hash[i−1])∗p+idx(s[i]) % mod
其中p和mod均为质数,且有p<mod,对于此种Hash方法,将p和mod尽量取大即可,这种情况下,冲突的概率是很低的。
双Hash公式:
hash1[i]=(hash1[i−1])∗p+idx(s[i]) % mod1
hash2[i]=(hash2[i−1])∗p+idx(s[i]) % mod2
hash结果为<hash1[n],hash2[n]>,这种Hash很安全。
获取子串的hash公式:
题目地址:http://poj.org/problem?id=3461
题目:
求模式串在文本串中出现的次数
解题思路:
p去13331,预处理出p^n,计算模式串的hash值,计算出文本串的hash数组,匹配模式串的hash值和文本串子串的hash值,统计答案。
时间复杂度:O(len(文本串))
ac代码:
#include<iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
typedef unsigned long long ll;
const int maxn = 1e6+5;
const ll p = 133331;
char s1[maxn], s2[maxn];
ll power[maxn], has[maxn];
void init() //预处理出p^n
{power[0] = 1;for(int i = 1; i < maxn; i++)power[i] = power[i - 1] * p; //unsigned long long 自然溢出
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);init();int t;scanf("%d", &t);while(t--){scanf("%s", s1 + 1);scanf("%s", s2 + 1);int len1 = strlen(s1 + 1), len2 = strlen(s2 + 1);has[0] = 0;for(int i = 1; i <= len2; i++)has[i] = has[i - 1] * p + (ll)(s2[i] - 'A' + 1);ll sum = 0, ans = 0;for(int i = 1; i <= len1; i++)sum = sum * p + (ll)(s1[i] - 'A' + 1);for(int i = len1; i <= len2; i++){ll tmp = has[i] - has[i - len1] * power[len1];if(sum == tmp) ans++;}printf("%llu\n", ans);}return 0;
}
【算法笔记+POJ3461】Oulipo(字符串hash模版)相关推荐
- 【POJ3461】Oulipo(字符串Hash)
problem 给定两个字符串s1,s2,求s1在s2中出现了多少次(可重叠). len(s1) < 1e4, len(s2) < 1e6. solution 字符串Hash 介绍: 字符 ...
- 【字符串算法1】 再谈字符串Hash(优雅的暴力)
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...
- 明翰数据结构与算法笔记V0.8(持续更新)
文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- 算法笔记(胡凡)学习笔记@Kaysen
本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...
- 《算法笔记》学习 入门篇
目录 <算法笔记>学习 3.1 简单模拟 例1:[PAT B1001]害死人不偿命的(3n+1)猜想 例2:[PAT B1032]挖掘机技术哪家强 3.2 查找元素 例:[codeup 1 ...
- 算法笔记知识点整理大全
每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
- 《算法笔记》——笔记
算法笔记 胡凡 曾磊 主编 机械工业出版社 文章目录 算法笔记 C/C++快速入门 提醒 memset sscanf与sprintf 引用 浮点数的比较 圆周率 复杂度 黑盒测试 入门篇(1)--入门 ...
- 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题
layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...
最新文章
- iframe 自动适应高和宽问题 和 其他Frame操作技巧
- Django web框架-----Django连接现有mysql数据库
- 旷视科技完成4.6亿美元C轮融资,打破商汤4.1亿美元单轮融资记录
- Oracle Execute Plan原理分析与实例分享之一
- Docker部署网站之后映射域名
- SpringMVC处理自定义异常,通过读取配置文件把错误信息显示在前台页面
- 【数据挖掘】数据预处理
- MTK PerfService介绍
- pandas 设置多重索引_pandas dataframe多重索引常用操作
- 对c语言课程的收获,c语言课程设计心得体会精选.doc
- java web邮件收发组件
- AWS新用户入门学习必备知识
- 现代治理12.0:Diligent发出“现代领导力”倡议,帮助组织创建更具多元化和包容性的董事会和领导团队
- Python条件语句(if、pass)
- 瑞利分布的平方是什么分布
- 2020年有寓意的领证日期_2020领证吉日
- 宇宙最全面试题目实录(二)
- 小红旗图标在excel如何输入_Excel用条件格式给数据插上小红旗
- 简单删除隐藏文件夹System Volume Information
- Android开发:编程实现界面定时刷新