[bzoj2462][哈希表]矩阵模板

【BeiJing2011】【BZOJ2351】Matrix Description给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 Input输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。 接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。 Output 阅读详情

Description

给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。
所谓01矩阵,就是矩阵中所有元素不是0就是1。

Input

输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。
接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。

Output

你需要输出Q行,每行为0或者1,表示这个矩阵是否出现过,0表示没有出现过,1表 示出现过。

Sample Input

3 3 2 2

111

000

111

3

11

00

11

11

00

11

Sample Output

1

0

1

HINT

对于100%的数据,N,M<=1000 A,B<=100

题解

二维哈希随便做

Upd 2018/6/30
今天又在另外一个oj上做了一遍发现这个NM的枚举被卡的死去活来
于是你可以把原矩阵里面每个A*B的矩阵都扔进一个map里面
复杂度可以降为log
但是莫名b站又t了我也不知道为什么233

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
unsigned int HA=119,HB=120;
unsigned int f[1100][1100],g[1100][1100];
unsigned int tmp[110][110];
int n,m,A,B,T;
char ch[1100];
int main()
{
    scanf("%d%d%d%d",&n,&m,&A,&B);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",ch+1);
        for(int j=1;j<=m;j++)f[i][j]=f[i][j-1]*HA+ch[j]-'0';
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            g[i][j]=g[i-1][j]*HB+f[i][j];
    scanf("%d",&T);
    while(T--)
    {
        for(int i=1;i<=A;i++)
        {
            scanf("%s",ch+1);
            for(int j=1;j<=B;j++)tmp[i][j]=tmp[i][j-1]*HA+ch[j]-'0';
        }
        for(int i=1;i<=A;i++)tmp[i][B]=tmp[i-1][B]*HB+tmp[i][B];
        bool bk=false;
        unsigned int tx=1,ty=1;
        for(int i=1;i<=A;i++)tx*=HA;
        for(int i=1;i<=B;i++)ty*=HB;
        for(int i=A;i<=n;i++)
            for(int j=B;j<=m;j++)
            {
                unsigned int num=g[i][j];
                num-=g[i-A][j]*ty;
                num+=g[i-A][j-B]*tx*ty;
                num-=g[i][j-B]*tx;

                if(num==tmp[A][B]){bk=true;break;}
            }
        if(bk==false)printf("0\n");
        else printf("1\n");
    }
    return 0;
}
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
typedef unsigned int Uit;
map<Uit,int> q;
const Uit HA=569,HB=114;
Uit mp[1100][1100],tmp[1100][1100],tx,ty;
char ch[1100];
char ss[1100][1100];
int n,m,A,B;
int nx[1100][1100],ny[1100][1100];
int px[2],py[2];
int firx[2],firy[2];
int row[1100][2];
int nxt[1100][1100],nw[2];
int main()
{
//  freopen("a.in","r",stdin);
//  freopen("a.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&A,&B);
    for(register int i=1;i<=n;++i)
    {
        scanf("%s",ss[i]+1);
        for(register int j=1;j<=m;++j)
            mp[i][j]=mp[i][j-1]*HA+ss[i][j]-'0';
    }
/*  for(register int i=A;i<=n;i++)
        for(register int j=B;j<=m;j++)
        {
            if(ss[i][j]=='0' && !firx[0])firx[0]=i,firy[0]=j;
            if(ss[i][j]=='1' && !firx[1])firx[1]=i,firy[1]=j;
            if(ss[i][j]=='0' && !row[i][0])row[i][0]=j;
            if(ss[i][j]=='1' && !row[i][1])row[i][1]=j;
        }
    for(register int i=A;i<=n;i++)
    {
        nw[0]=nw[1]=-1;
        for(register int j=m;j>=B;j--)
        {
            nxt[i][j]=nw[ss[i][j]-'0'];
            nw[ss[i][j]-'0']=j;
        }
    }*/
    for(register int i=1;i<=n;++i)
        for(register int j=1;j<=m;++j)
            mp[i][j]=mp[i-1][j]*HB+mp[i][j];
    tx=ty=1;
    for(int i=1;i<=B;++i)tx*=HA;
    for(int i=1;i<=A;++i)ty*=HB;
    for(int i=A;i<=n;i++)
        for(int j=B;j<=m;j++)
            q[mp[i][j]-mp[i-A][j]*ty-mp[i][j-B]*tx+mp[i-A][j-B]*tx*ty]++;
    int T;scanf("%d",&T);
    while(T--)
    {
        int g;
        for(register int i=1;i<=A;++i)
        {
            scanf("%s",ch+1);
            for(register int j=1;j<=B;++j)
            {
        //      if(i==A && j==B)g=ch[j]-'0';
                tmp[i][j]=tmp[i][j-1]*HA+ch[j]-'0';
            }
        }
        for(register int i=1;i<=A;++i)tmp[i][B]=tmp[i-1][B]*HB+tmp[i][B];
    /*  bool bk=false;
        if(!firx[g]){printf("0\n");continue;}
        for(register int i=firx[g];i<=n;++i)
            for(register int j=row[i][g];j;j=nxt[i][j])
                if(mp[i][j]-mp[i-A][j]*ty-mp[i][j-B]*tx+mp[i-A][j-B]*tx*ty==tmp[A][B]){bk=true;break;}*/
        if(q[tmp[A][B]])printf("1\n");
        else printf("0\n");
    }
    return 0;
}
矩阵(二维hash---o(m*n)) 给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过。 输入格式 第一行四个整数M,N,A,B。 接下来一个M行N列的01矩阵,数字之间没有空格。 接下来一个整数Q。 接下来Q个A行B列的01矩阵,数字之间没有空格。 输出格式 对于每个询问,输出1表示出现过,0表示没有出现过。 数据范围 A≤100... 阅读详情

相关推荐

关于哈希表二维数组的应用

梅花易数,关于二维数组,哈希表的应用,一位数组。

午觉后的hu测(18.1.7)

前言: 看来hu测之前好好睡一觉是有益处的 T1 矩阵模板 问题描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 输入文件 输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。 接下来Q个矩

Coco_T的博客 483

魔兽RPG老地图逆向工程:解密三国列传3.0武将招募限制(附JASS实战)

本文详细解析了《三国列传3.0》魔兽RPG地图的武将招募限制机制,通过逆向工程和JASS脚本修改技术,突破SLK加密防线并解密游戏逻辑。文章提供了从工具准备到代码修改的完整实战指南,帮助玩家解除武将数量限制,重温经典游戏的乐趣。

i1j2k的博客 369

【习题·哈希】Matrix(二维奇葩Hash)

题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 题解 这道题是一个奇葩的二维哈希,做法也非常的玄学,用到了字符串哈希的思想还利用了大质数取模的方法。具体的实现是这样的: 把每一行都看成某一个进制的数,一般使用131进制数,则可以f[i]=1...if[i]=1...if[i]=1...i...

Ronaldo7_ZYB的博客 551

区域法(zonal method)重构波前

目的:实现区域法的Matlab代码 1.理论介绍 区域法波前重构即从波前探测器测得的波前斜率中恢复出波前的相位值,其分为:休晋模型(Hudgin)[90]、绍契威尔模型(Southwell)[40]和弗雷德模型(Fried)[48]。 1.1 Fried模型,对于N×N微透镜阵列构成的网格: 以3*3的子透镜为例,解释上式,对其展开 改写为矩阵形式: 记作:S=AΦ,A根据N而确定。S是波前探测器测得的斜率,Φ是重构矩阵的相位值。 1.2 而Southwel...

EyRe1的博客 8196

DCM、PLL以及DLL等概念及详情

介绍DLL、PLL以及DCM的概念,总结其模块构成、工作原理、相互之间的差异与各自优势。

CLL_caicai的博客 8338

BZOJ2351 [BeiJing2011]Matrix 解题报告【数据结构】【Hash】

BZOJ 2351

中国计算机学会成都七中(高新校区)委员会委员活动室 1045

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

BZOJ2351: [BeiJing2011]Matrix【矩阵哈希】

题目描述: 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 题目分析: 矩阵哈希模板题。 哈希的方法就是定义H[i][j]=∑x=1i∑y=1jA[x][y]∗pi−x∗qj−yH[i][j]=\sum_{x=1}^i\sum_{y=1}^jA[x][y]*p^{i-x}*q^{j-y}H[i][j...

Master.Yi的博客 559

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力 (以YOLO26最新目标检测模型为基础,融合Detect_LSCD检测头进行改进)

2502_91881744的博客 704

YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLO11-pose关键点检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5419

BZOJ2462矩阵模板

2462: [BeiJing2011]矩阵模板 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 721 Solved: 320 Description 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 Input 输入文件的第

DCrusher's blog 708

3060台式机 Ubuntu 双系统部署 LingBot-Map 完整指南

摘要: 本文详细介绍了在配备RTX 3060显卡的台式机上部署Ubuntu双系统并安装LingBot-Map 3D重建模型的完整流程。LingBot-Map作为蚂蚁灵波科技开源的Transformer架构模型,在流式3D场景重建中展现出高效性能(20 FPS)和卓越精度(ATE仅6.42米)。指南涵盖关键准备步骤、UEFI分区原理、Ubuntu安装流程(推荐150GB空间及手动分区方案),以及后续驱动配置说明,特别强调RTX 3060需12GB显存支持,并提供了数据备份、Secure Boot处理等实用建议

huanghm88的专栏 309

BZOJ 2462 BeiJing 2011 矩阵模板 二维hash

题目大意:给出一个m*n的由01组成的矩阵,下面有q个询问,查询矩阵中存不存在大小为k*l的子矩阵。 思路:二维hash。我们先把大矩阵hash,然后把所有可能的k*l的子矩阵都插到哈希表里,然后只要对于每个询问hash一下看哈希表中是否存在。 值得一提的是,这个题只需要输出10个1就可以AC了。。 CODE: #include #include #include

(╯°口°)╯(┴—┴ 3万+

卫朋:IPD流程落地——产品计划阶段拆解

IPD计划阶段拆解

产品线负责人 957

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

传送门 二维哈希即可。 注意质数选的大一些,不然会超时。 还有插入的时候不判重居然比判重要快。。 ——代码 1 #include <cstdio> 2 int main() 3 { 4 int i = 10; 5 while(i--) puts("1"); 6 return 0; 7 } View Code ...

weixin_30487317的博客 115

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【BZOJ 2462】矩阵模板 (二维哈希)

题目 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 输入 输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。 接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。 输出 你需要输出Q行,每行为0或者...

weixin_33965305的博客 366

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[BZOJ 2462 BeiJing2011矩阵模板]矩阵Hash

[BZOJ 2462 BeiJing2011矩阵模板]矩阵Hash分类:Hash 1. 题目链接[BZOJ 2462 BeiJing2011矩阵模板]2. 题意描述给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 对于100%的数据,N,M<=1000,A,B<=100对于100\%的数据,

Fighting! 966

BZOJ2351Matrix 矩阵hash详解

4753: Lydsy2351 Matrix Time Limit:10 SecMemory Limit:128 MBSubmit:26Solved:15[Submit][Status][Web Board] Description 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。所谓01矩阵,就是矩阵中所有元素不是0就是...

weixin_30641999的博客 236

BZOJ 2351: [BeiJing2011]Matrix

2351: [BeiJing2011]MatrixTime Limit: 20 Sec Memory Limit: 128 MB Submit: 903 Solved: 281 [Submit][Status][Discuss] Description给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0

ywq12138的博客 486

BZOJ 2462: [BeiJing2011]矩阵模板

Description给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 Input输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。 接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。 Outp

Time_major 分殿 677

[算法竞赛进阶指南] 矩阵 (二维Hash+前缀和)

题目 给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过。 输入格式 第一行四个整数M,N,A,B。 接下来一个M行N列的01矩阵,数字之间没有空格。 接下来一个整数Q。 接下来Q个A行B列的01矩阵,数字之间没有空格。 输出格式 对于每个询问,输出1表示出现过,0表示没有出现过。 数据范围 A≤100,M,N,B...

eternityer 492

从代码工匠到架构巫师:构建可复制的编程直觉与系统思维

在软件工程领域,设计模式与架构原则是构建可维护系统的基石。理解这些概念背后的原理,能帮助开发者从机械编码转向创造性设计。其技术价值在于将看似直觉的“神来之笔”转化为可分析、可训练的思维模型,从而提升复杂问题解决能力与系统设计水平。这一思维范式在微服务设计、领域驱动开发及高并发系统等应用场景中尤为重要。本文以“代码女巫”为隐喻,探讨如何通过结构化技能栈——涵盖从基础编程、架构模式到系统思维的多层修炼——将这种“魔法”能力落地为日常可实践的工程方法,最终实现从执行者到设计者的角色跃迁。

weixin_30279671的博客 376

bzoj 2462 [BeiJing2011]矩阵模板

2462: [BeiJing2011]矩阵模板 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 715  Solved: 314 [Submit][Status][Discuss] Description 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。     所谓01矩阵,就是

clover_hxy的博客 961

bzoj 2462 [BeiJing2011]矩阵模板 (hash)

Description给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过。 所谓01矩阵,就是矩阵中所有元素不是0就是1。 Input输入文件的第一行为M、N、A、B,参见题目描述。 接下来M行,每行N个字符,非0即1,描述原矩阵。 接下来一行为你要处理的询问数Q。 接下来Q个矩阵,一共Q*A行,每行B个字符,描述Q个01矩阵。

阿柟喜欢吃小星星? 488

2462: [BeiJing2011]矩阵模板

题目链接题目大意:题解:题目数据比较奇怪,输出10个1就能AC了#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std;void work() { for(int i=1;i<=10;i++) cout

蒟蒻的Bzoj记录 547
上一篇: [bzoj3562][乱搞]神奇化合物
下一篇: [bzoj2152][点分治]聪聪可可
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值