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

临沂供电公司网站看网红直播做爰的网站

临沂供电公司网站,看网红直播做爰的网站,邢台营销型网站建设费用,北京高端定制网站建设前言 若不知道 哈希和字符串哈希 看我上一个作品: 字符串哈希从入门到精通 今天讲的约等于它的拓展…… 一.解决哈希冲突 1.1 基本概念 字符串哈希 将不同的字符串映射成不同的整数。 思想:将字符串映射成一个 p进制数字。 我们定义如下哈希函数&am…

前言

若不知道 哈希和字符串哈希 看我上一个作品:

字符串哈希从入门到精通 

今天讲的约等于它的拓展……

一.解决哈希冲突

1.1 基本概念

字符串哈希 将不同字符串映射成不同的整数。

思想:将字符串映射成一个 p进制数字

我们定义如下哈希函数:(该字符串下标从1开始

                                ​​​​​​​        hash(s)=\sum_{i=1}^{n}s[i]\ * \ p^{n-i}(mod\ M)

例如:p = 131,s = abc,其哈希值为 ​​​​​​​

但是,有时会存在多个不同的字符串哈希值相同的情况,我们通常的处理方式是调整p和M的值,取p为质数,M为大质数

 M 我们要取一个比较大的质数,但是可恶的出题人往往对一些质数如1e9 + 7、998244353等搞一些卡哈希的数据 (恶心)(往往通过生成一个随机数,根据随机数再取质数,去避免卡hash

当然我们肯定是有解决方案了,那就是我们今天要讲的双哈希!!!(其实还有许多方法但考试一般只需要双哈希就够了,如果在意可以去了解一下)

双哈希有多强呢?有一道题叫 Hash Killer III” 题目大概就是让你造数据去卡他的双哈希,直到出题网站倒闭这个题也没人A……

接下来给大家带来方法……

1.2 实现方式

双哈希顾名思义就是模两次hash 防止出题人的狡猾

整理了一个模板(仅供参考)

struct HASH{long long sed,mod,h[N],pw[N];void init(int ser_in,int mod_in){sed=ser_in,mod=mod_in;pw[0]=1;for(int i=1;i<N;i++){pw[i]=pw[i-1]*sed%mod;}} void make(string s){h[0]=s[0]%mod;for(int i=1;i<s.size();i++){h[i]=(h[i-1]*sed%mod+s[i])%mod;}}//构造hashlong long get(int l,int r){return (h[r]-h[l-1]*pw[r-l+1]%mod+mod)%mod;}//取子串可以根据题目使用
}S1,S2;

该怎么用呢?来个题试试!!!

二.例题《不同子串》

2.1 题目描述

2.2 思路

我们输入完后建立一个pair数组去记录我们的双哈希,然后将数组排序方便下面比较,比较这一个的哈希值与前一个的哈希值(我们已经排序了所以前面的要么比他小,要么相等)是否相等,如果不相等或i==1,那么不同的字串+1

2.3 代码

#include<bits/stdc++.h>
using namespace std;
string s;
int n,l;
const int N=1e6+5;
struct HASH{long long sed,mod,h[N],pw[N];void init(int ser_in,int mod_in){sed=ser_in,mod=mod_in;pw[0]=1;for(int i=1;i<N;i++){pw[i]=pw[i-1]*sed%mod;}} void make(string s){h[0]=s[0]%mod;for(int i=1;i<s.size();i++){h[i]=(h[i-1]*sed%mod+s[i])%mod;}}long long get(int l,int r){return (h[r]-h[l-1]*pw[r-l+1]%mod+mod)%mod;}
}S1,S2;//模板
int idx;
pair<long long,long long> ans[N];//双哈希数组
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int cnt=0;cin>>n>>l;cin>>s;s=" "+s;S1.init(114,1e9+7);S2.init(114514,998244353);//构造S1.make(s);S2.make(s);//构建整个字符串的哈希for(int i=1;i<=n-l+1;i++){ans[++idx].first=S1.get(i,i+l-1);ans[idx].second=S2.get(i,i+l-1);//截取字串}sort(ans+1,ans+idx+1);for(int i=1;i<=idx;i++){if(ans[i]!=ans[i-1]||i==1){//判断是否为不同字串cnt++;}}cout<<cnt;//输出return 0;
}

加纳!!!!!

http://www.dtcms.com/a/411686.html

相关文章:

  • 最小修改com.anji-plusjar包使之能够在springboot3使用
  • 武安网站建设价格网站建设公司做ppt吗
  • 【Arxiv 2025】重磅发布!全新傅里叶残差通道注意力模块FRCA,助显著性目标检测与跨模态融合,精准提升深度学习性能!
  • 网站空间期限查询企业取名字
  • 不良网站进入窗口免费正能量网站经营性备案需要什么资料
  • 摄影网站建设的功能有哪些不会编程 做网站
  • JVM 类加载
  • golang如何四舍五入到2位小数
  • ps临摹图片做网站的图片犯法吗黄冈贴吧
  • 天津智能网站建设哪里有北京太阳宫网站建设
  • 深圳网站建设的费用宁波公司名称大全
  • 国家建设部网站wordpress最新中文版
  • 商河大模型-网易智企发布的客服领域行业大模型
  • 国家电力安全网站两学一做企业电子商务网站平台建设
  • 网站建设软件公司唯爱wordpress主题
  • 用 PyTorch 搞定 CIFAR10 数据集
  • VLMs距离空间智能还有多远的路要走?
  • 做网站北京德国网站建设
  • 网站建立安全连接失败软装设计公司加盟
  • 搭建个人博客:云服务器IP如何使用
  • iis网站asp.net部署网站建设运营费计入什么科目
  • 建设外贸营销型网站需要什么青岛网站设计定制
  • 券商 做网站圣都装饰的口碑怎么样
  • 【算法训练营Day26】动态规划part2
  • 河北衡水建设网站公司电话wordpress ajax登录插件
  • 网站源码怎么搭建最新新闻热点事件2023年10月
  • 城乡建设部网站广州市国外学校网站设计
  • 泊头网站建设公司wordpress删除主题之后
  • 一站式营销平台wordpress学校网站模板
  • LeetCode 算法题【简单】338. 比特位计数