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

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

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

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
typedef unsigned int ull;
typedef long long ll;
using namespace std; const int N=,P1=,P2=;
int n,m,r,c,Q;
ull a[N][N],pw1[N],pw2[N],tot,hs[];
char mp[N][N]; int main(){
freopen("bzoj2462.in","r",stdin);
freopen("bzoj2462.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&r,&c); pw1[]=pw2[]=;
rep(i,,) pw1[i]=pw1[i-]*P1,pw2[i]=pw2[i-]*P2;
rep(i,,n) scanf("%s",mp[i]+);
rep(i,,n) rep(j,,m) a[i][j]=a[i][j-]*P1+mp[i][j]-'';
rep(i,,n) rep(j,,m) a[i][j]=a[i-][j]*P2+a[i][j];
rep(i,r,n) rep(j,c,m)
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];
sort(hs+,hs+tot+); memset(a,,sizeof(a));
for (scanf("%d",&Q); Q--; ){
rep(i,,r) scanf("%s",mp[i]+);
rep(i,,r) rep(j,,c) a[i][j]=a[i][j-]*P1+mp[i][j]-'';
rep(i,,r) rep(j,,c) a[i][j]=a[i-][j]*P2+a[i][j];
int k=lower_bound(hs+,hs+tot+,a[r][c])-hs;
if (hs[k]==a[r][c]) puts(""); else puts("");
}
return ;
}

BZOJ2462[Beijing2011]矩阵模板(二维Hash)的更多相关文章

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

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

  2. BZOJ 2462 矩阵模板(二维hash)

    题意:给出一个n*m的01矩阵,以及k个a*b的01矩阵,问每个是否能匹配原来的01矩阵. 由于k个矩阵的长和宽都是一样的,所以把原矩阵的所有a*b的子矩阵给hash出来.然后依次查找是否存在即可. ...

  3. 牛客练习赛1 矩阵 字符串二维hash+二分

    题目 https://ac.nowcoder.com/acm/contest/2?&headNav=www#question 解析 我们对矩阵进行二维hash,所以每个子矩阵都有一个额hash ...

  4. 【题解】 bzoj2462: [BeiJing2011]矩阵模板

    题面戳我 Solution 二维矩阵\(hash\),判断即可 自己YY了一个方法,\(bzoj\)T到飞,(一开始还用的三\(hash\)),交到luogu貌似跑的不慢啊qwq (我是不会告诉你全输 ...

  5. [BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)

    传送门 二维哈希即可. 注意质数选的大一些,不然会超时. 还有插入的时候不判重居然比判重要快.. ——代码 #include <cstdio> int main() { ; ") ...

  6. [bzoj2462] [BeiJing2011]矩阵模板

    二维的hash.. 注意n的范围是1000........ 真相似乎是全部输出1就行了233 #include<cstdio> #include<iostream> #incl ...

  7. 【kmp算法】【Rabin-Karp算法】bzoj2462 [BeiJing2011]矩阵模板

    算法就不说了,反正是基于字符串匹配的.这里比较一下kmp和Rabin-Karp算法. <法一>kmp算法. 592788 lizitong 2462 Accepted 4828 kb 68 ...

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

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

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

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

随机推荐

  1. 【POJ】2892 Tunnel Warfare

    [算法]平衡树(treap) [题解]treap知识见数据结构 在POJ把语言从G++换成C++就过了……??? #include<cstdio> #include<algorith ...

  2. 回顾一下MyBatis逆向工程——自动生成代码

    前言 最近做的项目(SSM+Shiro)的数据库表已经创建完成,一共有15张表,如果我们一个个去写pojo/bean的代码以及各种sql语句的话未免太过麻烦而且很容易出错,这个时候我们就需要MyBat ...

  3. 关于Linux下s、t、i、a权限

    文件权限除了r.w.x外还有s.t.i.a权限: 首先我们利用umask查看系统的权限为四位,首位就是特殊权限位,SetUID为4,SetGID为2,t为1 [root@iz2ze46xi6pjjj6 ...

  4. 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week1 Introduction to deep learning课堂笔记

    Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week1 Introduction to deep learn ...

  5. Linux内核【链表】整理笔记(2) 【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-4725279.html 关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比 ...

  6. Redis缓存Mysql模拟用户登录Java实现实例[www]

    Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...

  7. 同步方法-java

    除了同步代码块能实现同步执行外,同步方法也可以. 先看下同步代码块实现同步执行: public class Demo4 { public static void main(String[] args) ...

  8. MYSQL有外键无法删除

    今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...

  9. SQL 分页通用存储过程

    USE [DB] GO /****** Object: StoredProcedure [dbo].[SP_AspNetPager] Script Date: 10/23/2015 16:37:33 ...

  10. <一>dubbo框架学前原理介绍

    alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产 ...