博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2462[Beijing2011]矩阵模板(二维Hash)
阅读量:4356 次
发布时间:2019-06-07

本文共 1375 字,大约阅读时间需要 4 分钟。

二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度。

二维Hash:就是一维的等效拓展,注意两维的Base不能相同。

其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很科学。

1 #include
2 #include
3 #include
4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 typedef unsigned int ull; 6 typedef long long ll; 7 using namespace std; 8 9 const int N=1010,P1=2,P2=9191891;10 int n,m,r,c,Q;11 ull a[N][N],pw1[N],pw2[N],tot,hs[1000500];12 char mp[N][N];13 14 int main(){15 freopen("bzoj2462.in","r",stdin);16 freopen("bzoj2462.out","w",stdout);17 scanf("%d%d%d%d",&n,&m,&r,&c); pw1[0]=pw2[0]=1;18 rep(i,1,1000) pw1[i]=pw1[i-1]*P1,pw2[i]=pw2[i-1]*P2;19 rep(i,1,n) scanf("%s",mp[i]+1);20 rep(i,1,n) rep(j,1,m) a[i][j]=a[i][j-1]*P1+mp[i][j]-'0';21 rep(i,1,n) rep(j,1,m) a[i][j]=a[i-1][j]*P2+a[i][j];22 rep(i,r,n) rep(j,c,m)23 hs[++tot]=a[i][j]-a[i][j-c]*pw1[c]-a[i-r][j]*pw2[r]+a[i-r][j-c]*pw1[c]*pw2[r];24 sort(hs+1,hs+tot+1); memset(a,0,sizeof(a));25 for (scanf("%d",&Q); Q--; ){26 rep(i,1,r) scanf("%s",mp[i]+1);27 rep(i,1,r) rep(j,1,c) a[i][j]=a[i][j-1]*P1+mp[i][j]-'0';28 rep(i,1,r) rep(j,1,c) a[i][j]=a[i-1][j]*P2+a[i][j];29 int k=lower_bound(hs+1,hs+tot+1,a[r][c])-hs;30 if (hs[k]==a[r][c]) puts("1"); else puts("0");31 }32 return 0;33 }

 

转载于:https://www.cnblogs.com/HocRiser/p/9859395.html

你可能感兴趣的文章
PHP数据库连接mysql与mysqli的区别与用法
查看>>
char * 与char []探究理解
查看>>
QT窗体显示在屏幕中间位置
查看>>
emmet使用技巧
查看>>
RPC-Thrift(二)
查看>>
MSSQL for Linux 安装指南
查看>>
【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
查看>>
洛谷 P1036 选数
查看>>
女性社区TOP10
查看>>
BP神经网络算法推导及代码实现笔记zz
查看>>
前端必读:浏览器内部工作原理
查看>>
每天一个Linux命令(16)--which命令
查看>>
libevent文档学习(一)多线程接口和使用
查看>>
【补hackbar的坑】关于hackbar需要钱的补救措施
查看>>
纤程与Quasar
查看>>
MySQL的一个麻烦事
查看>>
Uri、URL和URN三者的区别
查看>>
数据字典的转换
查看>>
二维数组按照指定的字段排序的函数
查看>>
在IAR下通过Jlink将程序直接下载到Flash指定地址
查看>>