hash一下, 把原矩阵所有A*B的子矩阵的hash值存在set里面, 然后对于每个询问就求出hash值, 在set中查找.

------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
 
using namespace std;
 
typedef unsigned long long ull;
 
const int maxn = 1009;
const int p = 31, _p = 59;
 
char str[maxn];
int N, M, n, m;
ull h[maxn][maxn], Power, H[maxn];
set<int> S;
 
ull get(int x, int y) {
return h[x][y] - h[x][y + m] * Power;
}
 
void init() {
scanf("%d%d%d%d", &N, &M, &n, &m);
for(int i = 0; i < N; i++) {
scanf("%s", str);
h[i][M] = 0;
for(int j = M; j--; )
h[i][j] = h[i][j + 1] * p + str[j];
}
Power = 1;
for(int i = 1; i <= m; i++) Power = Power * p;
S.clear();
for(int i = N - n; i >= 0; i--)
for(int j = M - m; j >= 0; j--) {
ull t = 0;
for(int k = i; k < i + n; k++) t = t * _p + get(k, j);
S.insert(t);
}
}
 
int main() {
init();
int Q; scanf("%d", &Q);
while(Q--) {
ull res = 0;
for(int i = 0; i < n; i++) {
ull H = 0;
scanf("%s", str);
for(int j = m; j--; )
H = H * p + str[j];
res = res * _p + H;
}
printf("%d\n", S.find(res) != S.end());
}
return 0;
}

------------------------------------------------------------------------

2351: [BeiJing2011]Matrix

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 705  Solved: 200
[Submit][Status][Discuss]

Description

给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。
所谓01矩阵,就是矩阵中所有元素不是0就是1。

Input

输入文件的第一行为M、N、A、B,参见题目描述。
接下来M行,每行N个字符,非0即1,描述原矩阵。
接下来一行为你要处理的询问数Q。
接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。

Output

你需要输出Q行,每行为0或者1,表示这个矩阵是否出现过,0表示没有出现过,1表示出现过。

Sample Input

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

Sample Output

1
0
1

HINT

对于100%的实际测试数据,M、N ≤ 1000,Q = 1000

对于40%的数据,A = 1。

对于80%的数据,A ≤ 10。

对于100%的数据,A ≤ 100。

Source

2351: [BeiJing2011]Matrix( hash )的更多相关文章

  1. bzoj 2351 [BeiJing2011]Matrix——二维哈希

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2351 就是先把每行单独从左到右扫着乘一个 b1 哈希起来,然后再按列从上往下乘一个 b2 哈 ...

  2. BZOJ2351: [BeiJing2011]Matrix

    2351: [BeiJing2011]Matrix Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 589  Solved: 171[Submit][S ...

  3. 【BZOJ 2351】Matrix(Hash)

    题目链接 二维\(Hash\)类似二维前缀和,每一行看成一个\(h\)进制数,每一个以(1,1)为左上角的矩阵看成一个由每一行的\(Hash\)值组成的\(l\)进制数. 然后自己推推柿子就行. #i ...

  4. BZOJ2351[BeiJing2011]Matrix——二维hash

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

  5. 【bzoj2351】[BeiJing2011]Matrix 二维Hash

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

  6. 【BZOJ 2351】 Matrix

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2351 [算法] 哈希 [代码] #include<bits/stdc++.h& ...

  7. 【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix

    引用题解:http://blog.csdn.net/popoqqq/article/details/41084047 #include<cstdio> #include<cstrin ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. PHP-密码学算法及其应用-散列函数

    转自http://www.smatrix.org/bbs/simple/index.php?t5591.html /////////////////////////////////////////// ...

随机推荐

  1. 记录.net 中的常见术语

    --Entity Framework和NHibernate --EF和NH都是一种ORM技术.就是对象关系模型映射. --NHibernate和Entity Framework 4.0优劣势争论 -- ...

  2. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  3. 快速学习使用 Windows Azure 上的 SharePoint Server 2013

     为了在当今的企业环境中占据一席之地,您需要能够迅速顺应变化和应对挑战.有时,需要及时调整您的SharePoint 基础结构以保持竞争优势. 基础结构即服务可通过随时使用.即付即用的解决方案应对这 ...

  4. java 基本语法元素

    单行注释:  // 多行注释: /*         */   java文档: /**JAVA文档      *注释      */   : :  类似于中文的句号.   语句块:语句块也叫做复合语句 ...

  5. maven项目启动

    1服务install 2 build (tomcat:run)

  6. Oracle 生成指定范围内随机日期

    Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...

  7. 【课程分享】ASP.NET MVC5&amp;微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)

    对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲- ...

  8. c/c++测试程序运行时间

    算法分析中需要对各种算法进行性能测试,下面介绍两种通用的测试方法,由于只用到标准c语言函数,所以在各种平台和编译器下都能使用. 方法1: clock()函数 开始计时:start = clock() ...

  9. xcode 不值钱的动画UIButton

    #import "ViewController.h" @interface ViewController () /** 按钮 */ @property(nonatomic,weak ...

  10. MSSQL:修改tempdb设置增加DW性能

    Temp DB 在DW中变得非常重要,因为要进行大量的运算,如果内存不够数据就会放在Temp DB中 1. 把Temp DB移动到高性能的磁盘上. 2. 增加tempdb 的大小 3. 把Auto S ...