UVA 11019 字符矩阵哈希
来源:互联网 发布:侠客风云传 招式数据 编辑:程序博客网 时间:2024/06/06 11:41
思路:以前没做过字符矩阵的哈希,所以这题是看别人博客写的。
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<queue>#include<set>#include<cmath>#include<bitset>#define mem(a,b) memset(a,b,sizeof(a))#define lson i<<1,l,mid#define rson i<<1|1,mid+1,r#define llson j<<1,l,mid#define rrson j<<1|1,mid+1,r#define INF 0x7fffffff#define seed 13131#define seed1 1313#define maxn 1005typedef long long ll;typedef unsigned long long ull;using namespace std;ull p,Hash[maxn][maxn],Hash1[maxn][maxn];char s[maxn][maxn],str[105][105];int n,m,x,y;ull getHash(){ ull a,b=0; for(int i=0;i<x;i++) { a=0; for(int j=0;j<y;j++) a=a*seed1+str[i][j]; b=b*seed+a; } return b;}int getAns(){ ull base,a; int ans=0; base=1; for(int i=0;i<y;i++) base*=seed1; for(int i=0;i<n;i++) { a=0; for(int j=0;j<y;j++) a=a*seed1+s[i][j]; Hash1[i][y-1]=a; for(int j=y;j<m;j++) Hash1[i][j]=Hash1[i][j-1]*seed1-s[i][j-y]*base+s[i][j]; } base=1; for(int i=0;i<x;i++) base*=seed; for(int i=y-1;i<m;i++) { a=0; for(int j=0;j<x;j++) a=a*seed+Hash1[j][i]; Hash[x-1][i]=a; if(a==p) ans++; for(int j=x;j<n;j++) { Hash[j][i]=Hash[j-1][i]*seed-Hash1[j-x][i]*base+Hash1[j][i]; if(Hash[j][i]==p) ans++; } } return ans;}int main(){ //freopen("1.txt","r",stdin); int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",s[i]); scanf("%d%d",&x,&y); for(int i=0;i<x;i++) scanf("%s",str[i]); p=getHash(); printf("%d\n",getAns()); } return 0;}
0 0
- UVA 11019 字符矩阵哈希
- UVa 11019 Matrix Matcher 字符矩阵出现次数
- UVA 11019(Matrix Matcher-vector从迭代器中取值,AC自动机匹配字符矩阵)
- UVA, 445 Marvelous Mazes(根据输入的字符输出相应的矩阵)
- UVA 11019 Matrix Matcher(字符hash)
- uva 11464 偶数矩阵
- 矩阵 uva 12037
- UVA 矩阵链乘
- UVA - 10870(构造矩阵)
- Uva Recurrences 矩阵优化
- UVA 11464 偶数矩阵
- uva 10870 矩阵
- UVA 684 (矩阵行列式)
- 打印一个字符矩阵
- 字符矩阵旋转
- UVA 11019 Matrix Matcher(AC自动机矩阵匹配)
- UVA 11019 Matrix Matcher(AC自动机:矩阵匹配)
- UVA 11019 Matrix Matcher AC自动机字符串矩阵匹配
- CUDA内存三
- Linux之Ubuntu学习003——gcc/g++编译器
- 原来iTunes Connect 的 reject binary 改变为 remove this version from review
- 代理缓存服务器知识点整理
- POJ 1016 - Numbers That Count
- UVA 11019 字符矩阵哈希
- 黑马程序员_Java基础05天日志
- STL set和multiset
- hdu4577(大数+分析)
- listView 不能正常显示
- hdu1068——Girls and Boys
- 在Java程序中使用逻辑块的技巧
- HDU 2298 Toxophily
- 怎样将游戏从Unity导到iOS设备上