昨天卡了一天常数。。。然后发现吧$unsigned\space long\space long$改成$unsigned$就可以过了$qwq$


先把每一行的前缀哈希求出,然后再竖着把每个前缀哈希值哈希起来(相当于二维前缀哈希)

注意横着和竖着哈希的$Base$不能相同

#include<cstdio>
#include<iostream>
#define ll long long
#define ull unsigned
#define R register int
using namespace std;
const int B=,B2=,N=;
namespace Fread {
static char B[<<],*S=B,*D=B;
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
} inline bool isempty(const char& ch) {return ch<=||ch>=;}
inline void gs(char* s) {register char ch; while(isempty(ch=getchar())); do *s++=ch; while(!isempty(ch=getchar()));}
}using Fread::g; using Fread::gs;
int n,m,h,l;
ull hsh[N][N],p[N],p2[N],hs[N/][N/];
char s[N][N],ss[N/][N/];
const int MOD=;
bool v[MOD];
signed main() {
p[]=p2[]=; for(R i=;i<=;++i) p[i]=p[i-]*B; for(R i=;i<=;++i) p2[i]=p2[i-]*B2;
n=g(),m=g(),h=g(),l=g(); for(R i=;i<=n;++i) gs(s[i]+);
for(R i=;i<=n;++i) for(R j=;j<=m;++j) hsh[i][j]=hsh[i][j-]*B+s[i][j]-'';
for(R i=;i<=n;++i) for(R j=;j<=m;++j) hsh[i][j]=hsh[i-][j]*B2+hsh[i][j];
for(R i=h;i<=n;++i) for(R j=l;j<=m;++j) v[(hsh[i][j]-hsh[i-h][j]*p2[h]-hsh[i][j-l]*p[l]+hsh[i-h][j-l]*p2[h]*p[l])%MOD]=true;
for(R q=g();q;--q) {
for(R i=;i<=h;++i) gs(ss[i]+);
for(R i=;i<=h;++i) for(R j=;j<=l;++j) hs[i][j]=hs[i][j-]*B+ss[i][j]-'';
for(R i=;i<=h;++i) for(R j=;j<=l;++j) hs[i][j]=hs[i-][j]*B2+hs[i][j];
printf("%d\n",v[hs[h][l]%MOD]);
}
}

2019.06.12

BZOJ 2462 [BeiJing2011]矩阵模板 矩阵哈希的更多相关文章

  1. BZOJ 2462: [BeiJing2011]矩阵模板

    2462: [BeiJing2011]矩阵模板 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 915  Solved: 432[Submit][Stat ...

  2. BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)

    题目链接 序列上的Hash和前缀和差不多,二维Hash也和二维前缀和差不多了. 预处理大矩阵所有r*c的小矩阵hash值,再对询问的矩阵Hash. 类比于序列上\(s[r]-s[l-1]*pow[r- ...

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

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

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

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

  5. POJ_Fibonacci POJ_3070(矩阵快速幂入门题,附上自己写的矩阵模板)

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10521   Accepted: 7477 Descri ...

  6. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  7. C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速

    Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...

  8. Python 矩阵与矩阵以及矩阵与向量的乘法

    import numpy as np numpy模块的array相乘时,有两种方式:一是矩阵形式,二是挨个相乘. 需要用矩阵形式相乘时,则要用np.dot()函数. #矩阵与矩阵相乘a = np.ar ...

  9. POJ - 3233 矩阵套矩阵

    题意:给你矩阵\(A\),求\(S=\sum_{i=1}^{k}A^i\) 构造矩阵 \[ \begin{bmatrix} A & E \\ 0 & E\\ \end{bmatrix} ...

随机推荐

  1. POJ2442:Sequence

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=2442 我们先简化题意,假设只有两 ...

  2. Python:模块详解及import本质

    转于:http://www.cnblogs.com/itfat/p/7481972.html 博主:东大网管 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), ...

  3. IIS备份和还原

    当我们电脑系统有大量的站点和虚拟目录的时候,电脑因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果有成百上千个站点呢,任务量可想而知,本文将介绍如何备份和还原window ...

  4. Ajax调用后台方法报未定义

    需要在web.config中<system.webServer>节点下添加如下内容 <handlers> <add name="ajax" verb= ...

  5. IPC编程之消息队列

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面3类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 3.共享内存(匿名的和具名的) ...

  6. Http协议以及模拟http请求发送数据

    1 为什么要使用http协议 假设我现在有两个客户端浏览器,一个是google,一个是IE浏览器:我现在有两个服务器,一个是tomcat,一个是JBoss;在最初的情况下是:如果google要往tom ...

  7. C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程

    Step: download the latest rabbitmq-c via: https://github.com/alanxz/rabbitmq-c follow the document, ...

  8. windows、Linux 测试服务器、电脑的某些个端口是否打开

    测试远程端口是否开放包括两种方法: 一. 命令行的形式 二.代码 先参考我的博客 windows.Linux 开放端口 一.命令行的形式 两个命令:telnet.nc(netcat) 两种网络层协议: ...

  9. Luogu 3320 [SDOI2015]寻宝游戏

    一开始还真没想到. 发现从所有有宝藏的点出发绕一圈只要不刻意绕路答案都是一样的,即我们呢要求的最后答案$ans = dis(x_1, x_2) + dis(x_2, x_3) +... + dis(x ...

  10. (分享)一位资深程序员大牛给予Java初学者的学习路线建议

    摘自:http://bbs.itheima.com/thread-333038-1-1.html 如果你是在校学生,务必要在学好基础(比如计算机系统.算法.编译原理等等)的前提下,再考虑去进行下面的学 ...