哈希标记取代(KMP和AC自动机)poj3690
来源:互联网 发布:sql注入实例代码 编辑:程序博客网 时间:2024/05/16 03:46
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<string>using namespace std;typedef long long ll;typedef unsigned long long ull;const ll INFF=0x3f3f3f3f3f3f3f3f;const int INF=0x3f3f3f3f;int n,m,T,p,q;char str[1001][1001];char mapp[101][1001][1001];ull Hash[1001][1001],temp[1001][1001];const ull b1=9973,b2=1e8+7;void get_hash(char s[1001][1001],int N,int M){ ull t=1; for(int i=1;i<=q;i++)//最好不要用快速幂,可能会出问题,因为他利用的是unsigned long long 的自然溢出 t*=b1; for(int i=0;i<N;i++)//先求横向hash存放于temp { ull e=0; for(int j=0;j<q;j++) e=e*b1+s[i][j]; for(int j=0;j+q<=M;j++) { temp[i][j]=e; if(j+q<M) { e=e*b1+s[i][j+q]-s[i][j]*t; } } } t=1; for(int i=1;i<=p;i++) t*=b2; for(int j=0;j+q<=M;j++)//求纵向hash { ull e=0; for(int i=0;i<p;i++) e=e*b2+temp[i][j]; for(int i=0;i+p<=N;i++) { Hash[i][j]=e; if(i+p<N) { e=e*b2+temp[i+p][j]-temp[i][j]*t; } } }}int solve(){ multiset<ull> s; for(int i=0;i<T;i++) { get_hash(mapp[i],p,q); s.insert(Hash[0][0]);//是两个0是因为求哈希时只有!!! 0+p<=p,o+q<=q !!! } get_hash(str,n,m); for(int i=0;i+p<=n;i++) for(int j=0;j+q<=m;j++) s.erase(Hash[i][j]); return T-s.size();}int main(){ int ca=1; while(1) { scanf("%d%d%d%d%d",&n,&m,&T,&p,&q); if(!(n+m+T+p+q)) break; for(int i=0;i<n;i++) scanf("%s",str[i]); for(int i=0;i<T;i++) for(int j=0;j<p;j++) scanf("%s",mapp[i][j]); printf("Case %d: %d\n",ca++,solve()); } return 0;}
0 0
- 哈希标记取代(KMP和AC自动机)poj3690
- bzoj3172 AC自动机+标记和
- 动态规划和字符串匹配(KMP、AC自动机)
- 字符串算法:KMP算法和AC自动机
- KMP算法 AC自动机
- KMP && AC自动机模板
- POJ3690 Constellations 【KMP】
- BZOJ3172 [Tjoi2013]单词(AC自动机+打标记)
- 字典树+KMP+AC自动机
- Trie、KMP、AC自动机小结
- kmp,trie树,ac自动机
- 关于Trie KMP AC自动机
- 从kmp到ac自动机
- AC自动机以及KMP模板
- KMP&&trie树&&AC自动机
- KMP, 扩展KMP, Manacher, AC自动机
- POJ 4052-Hrinity(KMP算法+AC自动机)
- 字符串专题(trie,KMP,AC自动机,manacher)
- Python函数调用“传引用”还是”传值“
- Qt下使用OpenCV2.3.1静态编译报错,解决过程记录
- 计算机基础之牛客网刷题第二篇
- For artifact {null:null:null:jar}: The groupId cannot be empty解决办法
- OV9712+3518EV200
- 哈希标记取代(KMP和AC自动机)poj3690
- swift3.0 closure 闭包 定义属性 赋值 调用
- MTK 快速开机 技术详解
- 红帽系统管理II 02控制对文件的访问
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
- 把排序数组转换为高度最小的二叉搜索树
- Android Graphics学习计划
- 关于项目总名称报红色感叹号或者红叉问题的解决
- Servlet入门_TWO之Filter的学习