给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过。

输入格式

第一行四个整数M,N,A,B。

接下来一个M行N列的01矩阵,数字之间没有空格。

接下来一个整数Q。

接下来Q个A行B列的01矩阵,数字之间没有空格。

输出格式

对于每个询问,输出1表示出现过,0表示没有出现过。

数据范围

A≤100A≤100,M,N,B≤1000M,N,B≤1000,Q≤1000Q≤1000

输入样例:

3 3 2 2
111
000
111
3
11
00
11
11
00
11

输出样例:

1
0
1
题意:判断查询时输入的矩阵是否是上面那个的子矩阵
思路:哈希可以用快速判断是否相等,我们可以预处理出上面大矩阵的所有小矩阵的哈希值,我们每个位置再去遍历肯定不行那样就是(n*m)^2,会超时,我们可以利用哈希的加减性质,我们首先计算出每一行的前缀哈希值
然后我们再预处理子矩阵的时候利用哈希值合并的性质只用遍历每一行,这样就省去了一个m,不会超时,然后用map保留下来所有的值,后面查询时候也计算每个矩阵的哈希值即可,判断map中是否存在
因为我们的哈希只能记录一维的哈希值,二维的记录会极大可能发生冲突,只能用二维转化成一维再去记录,切记要用unsigned long long ,可能很多人会问为什么不用mod,因为ull自带mod功能
#include<bits/stdc++.h>
#define maxn 1005
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ll m,n,a,b;
char str[maxn][maxn],s[maxn][maxn];
ull dp[maxn][maxn];
ull f[maxn];
map<ull,ll> mp;
void hash_code(){//记录所有行的前缀哈希值
for(int i=;i<=m;i++){
f[]=;
for(int j=;j<=n;j++){
dp[i][j]=dp[i][j-]*+str[i][j]-''+;
if(i==) f[j]=f[j-]*;
}
}
}
void init(){
for(int i=;i<=m-a+;i++){
for(int j=;j<=n-b+;j++){
ull sum=;
for(int k=i;k<i+a;k++){//利用哈希合并性质省去一层循环
sum=sum*f[b]+dp[k][j+b-]-dp[k][j-]*f[b];
}
mp[sum]=;
//printf("%llu\n",sum);
}
}
}
int main(){
scanf("%lld%lld%lld%lld",&m,&n,&a,&b);
for(int i=;i<=m;i++){
scanf("%s",str[i]+);
}
hash_code();
init();
ll q;
scanf("%lld",&q);
for(int i=;i<q;i++){
for(int j=;j<=a;j++){
scanf("%s",s[j]+);
}
ull sum=;
for(int j=;j<=a;j++){
for(int k=;k<=b;k++){
sum=sum*+s[j][k]-''+;
}
}
//printf("%llu\n",sum);
if(mp[sum]) printf("1\n");
else printf("0\n");
}
}

AcWing 156. 矩阵 (哈希二维转一维查询)打卡的更多相关文章

  1. php 二维转一维

    Array(    [0] => Array        (            [salesorderid] => 10001            [createdtime] =& ...

  2. Win10 UWP开发:摄像头扫描二维码/一维码功能

    这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...

  3. 三维码 & 二维码 & 一维码

    三维码 & 二维码 & 一维码 3D, 2D, 1D 防伪国家标准 -<结构三维码防伪技术条件> http://www.xinhuanet.com/tech/2019-12 ...

  4. AcWing - 156 矩阵(二维哈希)

    题目链接:矩阵 题意:给定一个$m$行$n$列的$01$矩阵$($只包含数字$0$或$1$的矩阵$)$,再执行$q$次询问,每次询问给出一个$a$行$b$列的$01$矩阵,求该矩阵是否在原矩阵中出现过 ...

  5. 【BZOJ 2462】矩阵模板 (二维哈希)

    题目 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过. 所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...

  6. 2018牛客网暑期ACM多校训练营(第二场) J - farm - [随机数哈希+二维树状数组]

    题目链接:https://www.nowcoder.com/acm/contest/140/J 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K ...

  7. HDU 6336.Problem E. Matrix from Arrays-子矩阵求和+规律+二维前缀和 (2018 Multi-University Training Contest 4 1005)

    6336.Problem E. Matrix from Arrays 不想解释了,直接官方题解: 队友写了博客,我是水的他的代码 ------>HDU 6336 子矩阵求和 至于为什么是4倍的, ...

  8. [BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)

    传送门 二维哈希即可. 注意质数选的大一些,不然会超时. 还有插入的时候不判重居然比判重要快.. ——代码 #include <cstdio> int main() { ; ") ...

  9. AcWing 前缀和 一维加二维

    一维 #include<bits/stdc++.h> using namespace std; ; int n,m; int a[N],s[N]; int main(){ ios::syn ...

随机推荐

  1. stat函数学习

    stat函数组 前面介绍的通过ls命令查看到的文件信息,都可以使用stat函数组提取出来• stat函数组– 使用命令man stat查看相关文档• 函数int stat(const char *pa ...

  2. Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问

    一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...

  3. 跨主机网络-overlay(18)

    docker overlay跨主机网络 .环境 docker版本 Docker version -ce, build fc4de44 3台主机 192.168.55.51 host1 192.168. ...

  4. Postgresql临时表

    PostgreSQL支持两类临时表,会话级和事务级临时表.在会话级别的临时表中,在整个会话的生命周期中,数据一直保存.事务级临时表,数据只存在于这个事务的生命周期中.不指定临时表的属性, Postgr ...

  5. jackson反序列化报错Unrecognized field , not marked as ignorable

    使用Jackson提供的json注解. @JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样.这个注解只能用在POJO存在 ...

  6. cannot find module node-sass

    解决方法: npm install --save-dev node-sass

  7. ELK问题处理

    1.Logstash收集tomcat日志时报错warn: log4j:WARN No appenders could be found for logger (org.apache.http.clie ...

  8. flex属性flex-grow、flex-shrink、flex-basis

    tip: 1)这些属性写在子元素中,作用于子元素(父元素中应设置display:flex) 2)作用是子元素如何分配父元素的空间 3) flex-grow 是扩展比率,当子元素宽度总和小于父元素宽度时 ...

  9. Emacs 25.1 error solved: url-http-create-request: Multibyte text in HTTP request

    Emacs 25.1 error solved: url-http-create-request: Multibyte text in HTTP request */--> code {colo ...

  10. MES training

    unique identity 1.project name , namespace 2. select XML (not html) 3. view and controller will be i ...