BZOJ 2462 [BeiJing2011]矩阵模板 矩阵哈希
昨天卡了一天常数。。。然后发现吧$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]矩阵模板 矩阵哈希的更多相关文章
- BZOJ 2462: [BeiJing2011]矩阵模板
2462: [BeiJing2011]矩阵模板 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 915 Solved: 432[Submit][Stat ...
- BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
题目链接 序列上的Hash和前缀和差不多,二维Hash也和二维前缀和差不多了. 预处理大矩阵所有r*c的小矩阵hash值,再对询问的矩阵Hash. 类比于序列上\(s[r]-s[l-1]*pow[r- ...
- bzoj 2351 [BeiJing2011]Matrix——二维哈希
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2351 就是先把每行单独从左到右扫着乘一个 b1 哈希起来,然后再按列从上往下乘一个 b2 哈 ...
- HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表
2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 ...
- POJ_Fibonacci POJ_3070(矩阵快速幂入门题,附上自己写的矩阵模板)
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10521 Accepted: 7477 Descri ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- Python 矩阵与矩阵以及矩阵与向量的乘法
import numpy as np numpy模块的array相乘时,有两种方式:一是矩阵形式,二是挨个相乘. 需要用矩阵形式相乘时,则要用np.dot()函数. #矩阵与矩阵相乘a = np.ar ...
- POJ - 3233 矩阵套矩阵
题意:给你矩阵\(A\),求\(S=\sum_{i=1}^{k}A^i\) 构造矩阵 \[ \begin{bmatrix} A & E \\ 0 & E\\ \end{bmatrix} ...
随机推荐
- JQuery基本知识、选择器、事件、DOM操作、动画--2017年2月10日
$(对象)可以将JS对象转换为JQuery对象 .get(0)可以将JQuery对象转换为JS对象 并无太大区别,灵活点出即可
- 扩展欧几里得算法(exgcd)
Bezout定理: 对于任意整数a,b,存在一对整数x,y满足:a*x+b*y=gcd(a,b) 证明如下: 在欧几里得算法的最后一步:b=0,即:gcd(a,0)=a 对于b>0,根据欧几里得 ...
- BZOJ1657:[USACO2006MAR]Mooo
浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...
- 测试-Swagger:目录
ylbtech-测试-Swagger:目录 1.返回顶部 1. https://swagger.io/ 2.Swagger Editor http://swagger.io/swagger-edito ...
- 通过 命令提示符(cmd.exe)连接 Oracle 数据库
通过IP 连接数据库: sqlplus userName/userPassword@//IP:port/SID 例:sqlplus testuser/123456@//192.168.0.1:1521 ...
- pythoon_interview_redit
easy/intermediate What are Python decorators and how would you use them?How would you setup many pro ...
- 转——AHRS(航姿参考系统)和IMU(惯性测量单元)的区别
AHRS(航姿参考系统)和IMU(惯性测量单元)的区别 [测试测量] 发布时间:2010-05-09 16:52:09 http://bbs.ednchina.com/BLOG_ARTICLE_1 ...
- hdu1073
#include<iostream> using namespace std; #define N 5050 char a[N],b[N],tmp[N]; void Read(char p ...
- JWT使用过程中遇到的问题
1.创建token的盐设置过于简单,出现secret key byte array cannot be null or empty. 异常 解决方法:jwt:config:key:hwy ------ ...
- 盒模型的auto值
浮动在盒模型的auto值 属性 常规流 浮动 margin-left:auto 尽量撑满包含块 0px margin-right:auto 尽量撑满包含块 0px margin-top:auto 0p ...