第一次涉及HASH查找的知识

对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR。

这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类。

还有用26进制,不管怎么说,只要避免产生冲突,怎么哈希都行。

用的是BKDRHash法。

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 20000000
#define mm 1000000
using namespace std;
int hash[maxn]={};
char str[mm];
int news[mm]={}; int ans;
int n,nc; int BKDRHash(char *key)
{
int seed=nc;
int p=;
//cout<<"pass";
while (*key)
{
p=p*seed+(news[(*key++)-'a']);
}
return (p & 0x7FFFFFFF);
}
void hashit (char *s)
{
//memset(hash,0,sizeof hash);
int i,j,k;
char ch[mm]; for (i=;s[i+n-];i++)
{
for (j=;j<n;j++)
ch[j]=s[i+j];
ch[j]='\0';
//puts(ch);
int k=BKDRHash(ch);
k%=maxn;
//cout<<k<<endl;
if (!hash[k])
{
ans++;
hash[k]=;
//cout<<"pass"<<endl;
} }
}
int main()
{ while (scanf("%d %d",&n,&nc)!=EOF)
{
ans=;
getchar();
gets(str);
int cnt=;
int i,j;
for (i=;str[i];i++)
{
if (news[str[i]-'a']==) //使用二十六进制
news[str[i]-'a']=cnt++;
}
hashit(str);
printf("%d\n",ans);
}
}

POJ 1200 Crazy Search 字符串的Hash查找的更多相关文章

  1. POJ 1200 Crazy Search(字符串简单的hash)

    题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. ...

  2. poj 1200 Crazy Search(hash)

    题目链接:http://poj.org/problem?id=1200 思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的:使用hash可以在常数时间内查找,可以常数时间内判重, ...

  3. POJ 1200 Crazy Search 【hash】

    <题目链接> 题目大意: 给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种. 解题分析: 因为要判重,所以讲这些字符串hash一下,将 ...

  4. POJ 1200 Crazy Search【Hash入门】

    RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #inc ...

  5. POJ 1200 Crazy Search (哈希)

    题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One ...

  6. POJ – 1200 Crazy Search

    http://poj.org/problem?id=1200 #include<iostream> #include<cstring> using namespace std; ...

  7. POJ 1200 Crazy Search

    思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把 ...

  8. poj 1200 crasy search

    https://vjudge.net/problem/POJ-1200 题意: 给出一个字符串,给出子串的长度n和给出的字符串中不同字符的个数nc,统计这个字符串一共有多少不同的长度为n的子串. 思路 ...

  9. POJ 1200:Crazy Search(哈希)

    Crazy Search Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32483   Accepted: 8947 Des ...

随机推荐

  1. 阿里云https+nginx服务搭建

    购买证书 通过控制台进入CA证书服务,点击右上角的购买证书,进入如下图的界面,选择免费的Symantec的DV SSL. 一路点过去,然后回到证书服务主页,会出现一条订单信息,点击补全,如下图所示. ...

  2. 018、MySQL取满足日期在两个日期之间的所有数据

    #查询 SELECT GZJK_CREATEDATE FROM abc_table WHERE ( ( GZJK_CREATEDATE >= UNIX_TIMESTAMP( '2019-08-0 ...

  3. eclipse、idea中自动生成元模型JPA元模型对象

    一.eclipse 1.首先准备好两个jar包hibernate-jpa-2.0-api-1.0.1.Final和hibernate-jpamodelgen-4.3.5.Final 2.选中项目右击 ...

  4. Run K8s / 安装指南

    Windows 下载 kubectl 官方文档下载对应操作系统的 Kubectl 下载 minikube 如图将下载的文件放在一起,如图:   配置环境变量,如图:   配置Hype-V或者安装Vir ...

  5. python中groupby函数详解(非常容易懂)

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  6. SVPWM总结

    空间矢量算法 是以逆变器和电机作为一个整体来研究的.目标是产生电机定子的圆形磁场 模态选择, 上管导通 状态为1 下管导通 状态为0 那么状态为000 001 010 011 100 101 110 ...

  7. DNS原理和智能DNS及CDN

    CDN是什么 CDN(Content Delivery Network)是内容分发网络. 作用: 使用户可以就近取的所需要的内容,加速用户访问网站资源的速度.物理距离更近,响应速度更快.拦截部分网络请 ...

  8. C# SqlBulkCopy 避免插入重复数据(不重复即插入)

    之前写过一篇 C# SqlBulkCopy 大量数据导入到数据库 的文章介绍了大量数据导入到数据库的高效方法. 这篇文章与之有些关联,在这之前所想的是做全量插入,每次run这个job就会清空然后插入, ...

  9. VMware虚拟机黑屏

    引用自:VMware吧 近期很多朋友遇到了VMware Workstation 14开启或新建虚拟机后黑屏的现象,无法关机,软件也无法关闭 用任务管理器结束VMware后这个VMX进程也关不了 解决办 ...

  10. Caffe Install by Cmake in Ubuntu 18.04

    环境: Ubuntu 18.04 CUDA 10.0 cudnn opencv 3.0 见 https://www.cnblogs.com/xiaoniu-666/p/11907710.html -- ...