poj-1200-Crazy Search-karp-rabin算法
来源:互联网 发布:铣腰形状孔编程 编辑:程序博客网 时间:2024/05/20 16:34
字符串hash中的karp-rabin算法的应用。
把字符串转换为进制数。
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<queue>#include<stack>#include<map>#include<string>#include<stdlib.h>#define INT_MAX 0x7fffffff#define INF 999999#define max3(a,b,c) (max(a,b)>c?max(a,b):c)#define min3(a,b,c) (min(a,b)<c?min(a,b):c)#define mem(a,b) memset(a,b,sizeof(a))using namespace std;struct node{ int u; int v; int w; bool friend operator < (node a, node b){ return a.w < b.w; }}edge[1001];int gcd(int n,int m){if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);}int lcm(int n,int m){if(n<m) swap(n,m);return n/gcd(n,m)*m;}int hash[16000005];char st[16000005];int main(){ int n,nc; while(~scanf("%d %d %s",&n,&nc,st)) { int num; num=0; mem(hash,0); int len=strlen(st); int ns; ns=nc; int i; int t=0; int name[10000]; for (i =0; i < len; i++) if (name[st[i]] ==0) name[st[i]] = t++; for(i=0;i<n-1;i++) { num=num*nc+name[st[i]]; ns=ns*nc; } int ans=0; for(i=n-1;i<len;i++) { num=(num*nc+name[st[i]])%ns; if(!hash[num])ans++; hash[num]=1; } printf("%d\n",ans); } return 0;}
- poj-1200-Crazy Search-karp-rabin算法
- hash&Rabin-Karp字符串查找POJ 1200 Crazy Search
- Pku1200 Crazy Search(Rabin Karp)
- Rabin-Karp算法
- Rabin Karp 算法
- Rabin-Karp算法
- Rabin-Karp算法
- Rabin-Karp算法学习
- Rabin-Karp算法
- KR ,Karp Rabin 算法
- Rabin-Karp算法
- Karp-Rabin算法
- 字符串算法-Rabin-Karp
- Rabin-Karp 算法
- Rabin-Karp算法学习
- POJ 1200 Crazy Search
- poj 1200 Crazy Search
- POJ 1200 Crazy Search
- VS2008源代码管理软件组合-visualSVN Server+TortoiseSVN+AnkhSvn 和 使用SVN应该养成的管理习惯
- 图像的二维傅里叶变换
- 最小度限制生成树
- VS 常见快捷键
- 使用SSH实现服务器之间的免登陆
- poj-1200-Crazy Search-karp-rabin算法
- Struts2.perperties中的配置详解
- Javascript跨域访问解决方案
- 堆排序算法 总结
- USB的通讯的建立过程
- 正则表达式在线测试
- 【配置linux】最低要求
- PYTHON EXE
- 介绍一个快速导航插件:Windy