[BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)
二维哈希即可。
注意质数选的大一些,不然会超时。
还有插入的时候不判重居然比判重要快。。
——代码
#include <cstdio> #include <cstring> #include <iostream> #define UI unsigned int const int p = 1000007, MAXN = 1001; int n, m, a, b, q, cnt, headView Code [p], next[MAXN * MAXN]; UI h, sum[MAXN][MAXN], base1[MAXN], base2[MAXN], to[MAXN * MAXN]; inline void insert(UI x) { int i, a = x % p; for(i = head[a]; i ^ -1; i = next[i]) if(!(to[i] ^ x)) return; to[cnt] = x; next[cnt] = head[a]; head[a] = cnt++; } inline bool find(UI x) { int i, a = x % p; for(i = head[a]; i ^ -1; i = next[i]) if(!(to[i] ^ x)) return 1; return 0; } int main() { int i, j; scanf("%d %d %d %d", &n, &m, &a, &b); base1[0] = base2[0] = 1; memset(head, -1, sizeof(head)); for(i = 1; i <= n; i++) base1[i] = base1[i - 1] * 19260817; for(i = 1; i <= m; i++) base2[i] = base2[i - 1] * 20011001; for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) scanf("%1d", &sum[i][j]); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) sum[i][j] += sum[i - 1][j] * 19260817; for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) sum[i][j] += sum[i][j - 1] * 20011001; for(i = a; i <= n; i++) for(j = b; j <= m; j++) { h = sum[i][j]; h -= sum[i - a][j] * base1[a]; h -= sum[i][j - b] * base2[b]; h += sum[i - a][j - b] * base1[a] * base2[b]; insert(h); } scanf("%d", &q); while(q--) { for(i = 1; i <= a; i++) for(j = 1; j <= b; j++) scanf("%1d", &sum[i][j]); for(i = 1; i <= a; i++) for(j = 1; j <= b; j++) sum[i][j] += sum[i - 1][j] * 19260817; for(i = 1; i <= a; i++) for(j = 1; j <= b; j++) sum[i][j] += sum[i][j - 1] * 20011001; printf("%d\n", find(sum[a][b])); } return 0; }
- BZOJ 2462 BeiJing 2011 矩阵模板 二维hash
- BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
- [BZOJ]2462: [BeiJing2011]矩阵模板 二维hash
- BZOJ2462[Beijing2011]矩阵模板(二维Hash)
- BZOJ 2462 BeiJing 2011 矩阵模板 二维hash
- bzoj2462 [BeiJing2011]矩阵模板 hash
- bzoj 2462 [BeiJing2011]矩阵模板 (hash)
- BZOJ 2462: [BeiJing2011]矩阵模板
- 【bzoj2462】[BeiJing2011]矩阵模板
- [bzoj2462] [BeiJing2011]矩阵模板
- bzoj 2462 [BeiJing2011]矩阵模板
- BZOJ 2462: [BeiJing2011]矩阵模板
- 【BeiJing2011】【BZOJ2462】矩阵模板
- BZOJ 2462: [BeiJing2011]矩阵模板 二维哈希
- BZOJ 2462/2351 [BeiJing2011]矩阵模板/[BeiJing2011]Matrix 二维哈希
- BZOJ 2462: [BeiJing2011]矩阵模板
- 【kmp算法】【Rabin-Karp算法】bzoj2462 [BeiJing2011]矩阵模板
- [BZOJ2462]矩阵模板(暴力||矩阵hash)
- [BZOJ 2462 BeiJing2011矩阵模板]矩阵Hash
- 2462: [BeiJing2011]矩阵模板