引用题解:http://blog.csdn.net/popoqqq/article/details/41084047

#include<cstdio>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
int n,m,a,b,q;
const ull seed1=17,seed2=19;
#define MOD 1000001
ull v[MOD],sum[1001][1001],ord[201],pow1[1001],pow2[1001];
char s[1001][1001];
int first[MOD],next[MOD],en;
void Insert(const ull &V)
{
int U=(int)(V%MOD);
v[en]=V;
next[en]=first[U];
first[U]=en++;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&a,&b);
memset(first,-1,sizeof(first));
ord['0']=1,ord['1']=2;
for(int i=1;i<=n;++i)
scanf("%s",s[i]+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sum[i][j]+=sum[i][j-1]*seed2;
pow1[0]=pow2[0]=1;
for(int i=1;i<=n;i++) pow1[i]=pow1[i-1]*seed1;
for(int i=1;i<=m;i++) pow2[i]=pow2[i-1]*seed2;
for(int i=a;i<=m;i++)
for(int j=b;j<=n;j++)
Insert(sum[i][j]
-sum[i-a][j]*pow1[a]
-sum[i][j-b]*pow2[b]
+sum[i-a][j-b]*pow1[a]*pow2[b]);
scanf("%d",&q);
for(;q;--q)
{
for(int i=1;i<=a;i++) scanf("%s",s[i]+1);
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1;
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
sum[i][j]+=sum[i][j-1]*seed2;
int o=(int)(sum[a][b]%MOD);
for(int i=first[o];i!=-1;i=next[i]) if(v[i]==sum[a][b]) {puts("1"); goto OUT;}
puts("0"); OUT:;
}
return 0;
}

【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix的更多相关文章

  1. BZOJ2351: [BeiJing2011]Matrix

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

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

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

  3. HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表

    2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 ...

  4. redis哈希缓存数据表

    redis哈希缓存数据表 REDIS HASH可以用来缓存数据表的数据,以后可以从REDIS内存数据库中读取数据. 从内存中取数,无疑是很快的. var FRedis: IRedisClient; F ...

  5. 2351: [BeiJing2011]Matrix( hash )

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

  6. 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示

    编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...

  7. 《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表

    2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据.不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素.当这个定长数据是一个无符号整数时,可 ...

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

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

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

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

随机推荐

  1. SQLNET跟踪tnsping过程

    原文地址:SQLNET跟踪tnsping过程 作者:yingyifeng306 sqlnet是oracle提供的与网络层面交互的一个工具,比如如何解析客户端发起的连接,如何对客户端发起的连接进行辨别, ...

  2. The base command for the Docker CLI.

    Description The base command for the Docker CLI. Child commands Command Description docker attach At ...

  3. linux crontab执行shell脚本中包含相对路径的问题

    实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...

  4. Educational Codeforces Round 41 A B C D E

    A. Tetris 题意 俄罗斯方块,问能得多少分. 思路 即求最小值 Code #include <bits/stdc++.h> #define F(i, a, b) for (int ...

  5. sphinx 分词搭建手册

    步奏1. yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expa ...

  6. Linux下的两个经典宏定义【转】

    转自:http://www.linuxidc.com/Linux/2015-07/120014.htm 本文首先介绍Linux下的经典宏定义,感受极客的智慧,然后根据该经典定义为下篇文章作铺垫. of ...

  7. Oracle rman 脚本

    1.shell脚本1)vi rman_backup.cmd#rman_backup.cmdconnect target /run{  allocate channel d1 device type d ...

  8. HDU-5451

    Best Solver Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Tota ...

  9. 抽象语法树简介(ZZ)

    转载自: http://www.cnblogs.com/cxihu/p/5836744.html (一)简介 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状 ...

  10. 《JAVA8实战》读书笔记之传递方法和传递lambda

    传递方法: 假设 你有一个Apple类,它 有一个getColor方法,还有一个变量inventory保存着一个Apples的列表.你可能想要选出所 有的绿苹果,并返回一个列表.通常我们用筛选(fil ...