[BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)
二维哈希即可。
注意质数选的大一些,不然会超时。
还有插入的时候不判重居然比判重要快。。
——代码
#include <cstdio>
int main()
{
int i = ;
while(i--) puts("");
return ;
}
O不,错了,是这个。
#include <cstdio>
#include <cstring>
#include <iostream>
#define UI unsigned int const int p = , MAXN = ;
int n, m, a, b, q, cnt, head[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 ^ -; 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 ^ -; i = next[i])
if(!(to[i] ^ x))
return ;
return ;
} int main()
{
int i, j;
scanf("%d %d %d %d", &n, &m, &a, &b);
base1[] = base2[] = ;
memset(head, -, sizeof(head));
for(i = ; i <= n; i++) base1[i] = base1[i - ] * ;
for(i = ; i <= m; i++) base2[i] = base2[i - ] * ;
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
scanf("%1d", &sum[i][j]);
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
sum[i][j] += sum[i - ][j] * ;
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
sum[i][j] += sum[i][j - ] * ;
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 = ; i <= a; i++)
for(j = ; j <= b; j++)
scanf("%1d", &sum[i][j]);
for(i = ; i <= a; i++)
for(j = ; j <= b; j++)
sum[i][j] += sum[i - ][j] * ;
for(i = ; i <= a; i++)
for(j = ; j <= b; j++)
sum[i][j] += sum[i][j - ] * ;
printf("%d\n", find(sum[a][b]));
}
return ;
}
[BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)的更多相关文章
- BZOJ2462[Beijing2011]矩阵模板(二维Hash)
二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度. 二维Hash:就是一维的等效拓展,注意两维的Base不能相同. 其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很 ...
- BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
题目链接 序列上的Hash和前缀和差不多,二维Hash也和二维前缀和差不多了. 预处理大矩阵所有r*c的小矩阵hash值,再对询问的矩阵Hash. 类比于序列上\(s[r]-s[l-1]*pow[r- ...
- BZOJ 2462 矩阵模板(二维hash)
题意:给出一个n*m的01矩阵,以及k个a*b的01矩阵,问每个是否能匹配原来的01矩阵. 由于k个矩阵的长和宽都是一样的,所以把原矩阵的所有a*b的子矩阵给hash出来.然后依次查找是否存在即可. ...
- 牛客练习赛1 矩阵 字符串二维hash+二分
题目 https://ac.nowcoder.com/acm/contest/2?&headNav=www#question 解析 我们对矩阵进行二维hash,所以每个子矩阵都有一个额hash ...
- 【题解】 bzoj2462: [BeiJing2011]矩阵模板
题面戳我 Solution 二维矩阵\(hash\),判断即可 自己YY了一个方法,\(bzoj\)T到飞,(一开始还用的三\(hash\)),交到luogu貌似跑的不慢啊qwq (我是不会告诉你全输 ...
- [bzoj2462] [BeiJing2011]矩阵模板
二维的hash.. 注意n的范围是1000........ 真相似乎是全部输出1就行了233 #include<cstdio> #include<iostream> #incl ...
- 【kmp算法】【Rabin-Karp算法】bzoj2462 [BeiJing2011]矩阵模板
算法就不说了,反正是基于字符串匹配的.这里比较一下kmp和Rabin-Karp算法. <法一>kmp算法. 592788 lizitong 2462 Accepted 4828 kb 68 ...
- BZOJ2351[BeiJing2011]Matrix——二维hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
- 【bzoj2351】[BeiJing2011]Matrix 二维Hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
随机推荐
- 转-用Eclipse 开发Dynamic Web Project应用程序
简介:本文仅简单介绍基于Eclipse开发Dynamic Web Project应用下的JSP,Servlet及TOMCAT数据源的配置和开发. 软件环境: Eclipse Java EE IDE f ...
- python 字符串的split()函数详解(转)
作者:宋桓公 出处:http://www.cnblogs.com/douzi2/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同 ...
- android开发学习 ------- volley网络请求的实例
在 http://www.sojson.com/httpRequest/ 上对http进行访问,将此访问在android中的应用 ********************************* ...
- AJPFX总结Socket的低层次Java网络编程
Socket的低层次Java网络编程 1 Socket通讯 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接. ...
- ES3之bind方法的实现模拟
扩展Function原型方法,此处用myBind来模拟bind实现 Function.prototype.myBind = function(o /*,args*/){ //闭包无法获取t ...
- ReactJS-0-React介绍
React介绍: React是一个库而不是一个MVC框架,因为React只负责解决MVC框架中V(View)层面的问题,React致力于创建可重用的UI组件.(React is a library f ...
- DOM简介及节点、属性、查找节点的方法
DOM(Document Object Modle) 操作文档的编程接口DOM定义了表示和修改文档的方法,不能修改css样式表,在js中使用DOM方法改变元素的css样式,实质上是在元素上添加行间样式 ...
- struts2 <allowed-methods > 标签配置
1.在struts2 2.5版本中添加了对方法访问的权限,如果没有被添加到<allow-method> 方法的标签,将会报一下错误 5:05:18.078 [http-apr-8020 ...
- swift VTables
VTables https://github.com/apple/swift/blob/master/docs/SIL.rst#vtables decl ::= sil-vtable sil-vtab ...
- Oracle反向字符截取逗號分隔字符串
DECLARE M ); BEGIN FOR I IN ( WITH T AS (SELECT REVERSE('i,am,a,test,hahahhah') AS STR FROM DUAL) SE ...