[BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)
二维哈希即可。
注意质数选的大一些,不然会超时。
还有插入的时候不判重居然比判重要快。。
——代码
#include <cstdio>
int main()
{
int i = ;
while(i--) puts("");
return ;
}
O不,错了,是这个。
#include <cstdio>
#include <cstring>
#include <iostream>
#define UI unsigned int const int p = , MAXN = ;
int n, m, a, b, q, cnt, head[p], next[MAXN * MAXN];
UI h, sum[MAXN][MAXN], base1[MAXN], base2[MAXN], to[MAXN * MAXN]; inline void insert(UI x)
{
int i, a = x % p;
for(i = head[a]; i ^ -; i = next[i])
if(!(to[i] ^ x))
return;
to[cnt] = x;
next[cnt] = head[a];
head[a] = cnt++;
} inline bool find(UI x)
{
int i, a = x % p;
for(i = head[a]; i ^ -; i = next[i])
if(!(to[i] ^ x))
return ;
return ;
} int main()
{
int i, j;
scanf("%d %d %d %d", &n, &m, &a, &b);
base1[] = base2[] = ;
memset(head, -, sizeof(head));
for(i = ; i <= n; i++) base1[i] = base1[i - ] * ;
for(i = ; i <= m; i++) base2[i] = base2[i - ] * ;
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
scanf("%1d", &sum[i][j]);
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
sum[i][j] += sum[i - ][j] * ;
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
sum[i][j] += sum[i][j - ] * ;
for(i = a; i <= n; i++)
for(j = b; j <= m; j++)
{
h = sum[i][j];
h -= sum[i - a][j] * base1[a];
h -= sum[i][j - b] * base2[b];
h += sum[i - a][j - b] * base1[a] * base2[b];
insert(h);
}
scanf("%d", &q);
while(q--)
{
for(i = ; i <= a; i++)
for(j = ; j <= b; j++)
scanf("%1d", &sum[i][j]);
for(i = ; i <= a; i++)
for(j = ; j <= b; j++)
sum[i][j] += sum[i - ][j] * ;
for(i = ; i <= a; i++)
for(j = ; j <= b; j++)
sum[i][j] += sum[i][j - ] * ;
printf("%d\n", find(sum[a][b]));
}
return ;
}
[BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)的更多相关文章
- BZOJ2462[Beijing2011]矩阵模板(二维Hash)
二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度. 二维Hash:就是一维的等效拓展,注意两维的Base不能相同. 其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很 ...
- BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
题目链接 序列上的Hash和前缀和差不多,二维Hash也和二维前缀和差不多了. 预处理大矩阵所有r*c的小矩阵hash值,再对询问的矩阵Hash. 类比于序列上\(s[r]-s[l-1]*pow[r- ...
- BZOJ 2462 矩阵模板(二维hash)
题意:给出一个n*m的01矩阵,以及k个a*b的01矩阵,问每个是否能匹配原来的01矩阵. 由于k个矩阵的长和宽都是一样的,所以把原矩阵的所有a*b的子矩阵给hash出来.然后依次查找是否存在即可. ...
- 牛客练习赛1 矩阵 字符串二维hash+二分
题目 https://ac.nowcoder.com/acm/contest/2?&headNav=www#question 解析 我们对矩阵进行二维hash,所以每个子矩阵都有一个额hash ...
- 【题解】 bzoj2462: [BeiJing2011]矩阵模板
题面戳我 Solution 二维矩阵\(hash\),判断即可 自己YY了一个方法,\(bzoj\)T到飞,(一开始还用的三\(hash\)),交到luogu貌似跑的不慢啊qwq (我是不会告诉你全输 ...
- [bzoj2462] [BeiJing2011]矩阵模板
二维的hash.. 注意n的范围是1000........ 真相似乎是全部输出1就行了233 #include<cstdio> #include<iostream> #incl ...
- 【kmp算法】【Rabin-Karp算法】bzoj2462 [BeiJing2011]矩阵模板
算法就不说了,反正是基于字符串匹配的.这里比较一下kmp和Rabin-Karp算法. <法一>kmp算法. 592788 lizitong 2462 Accepted 4828 kb 68 ...
- BZOJ2351[BeiJing2011]Matrix——二维hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
- 【bzoj2351】[BeiJing2011]Matrix 二维Hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
随机推荐
- 字符串处理/贪心 Codeforces Round #307 (Div. 2) B. ZgukistringZ
题目传送门 /* 题意:任意排列第一个字符串,使得有最多的不覆盖a/b字符串出现 字符串处理/贪心:暴力找到最大能不覆盖的a字符串,然后在b字符串中动态得出最优解 恶心死我了,我最初想输出最多的a,再 ...
- 题解报告:hdu1219AC Me
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1219 Problem Description Ignatius is doing his homewo ...
- jmeter(九)分布式测试
Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...
- 求指教--hadoop2.4.1集群搭建及管理遇到的问题
集群规划: 主机名 IP 安装的软件 运行的进程 hadooop 192.168.1.69 jdk.hadoop NameNode.DFSZKFailoverController(zkfc) hado ...
- LN : leetcode 712 Minimum ASCII Delete Sum for Two Strings
lc 712 Minimum ASCII Delete Sum for Two Strings 712 Minimum ASCII Delete Sum for Two Strings Given t ...
- 【译】x86程序员手册41-10.6 TLB(快表)测试
译注:本章基本未做翻译 10.6 TLB Testing TLB测试 The 80386 provides a mechanism for testing the Translation Lookas ...
- 迅为IMX6开发板支持4G全网通模块GPS模块
IMX6开发板特点 处理器:IMX6开发板支持4G全网通模块GPS模块. 核心板配置:2GB DDR3内存 16GB EMMC 存储,扩展引脚多达320个:运行温度-20 ℃到+80 ℃之间. 核心 ...
- HDU_1710_二叉树前序中序确定后序
2018-3-6 按照王道机试书上的思路再做了一遍,先根据先序和中序建树,然后后序遍历. 静态分配数组用于建树,可以返回数组地址当作结点指针. #include<iostream> #in ...
- 上POJ刷题
Online Judge系统 Online Judge系统(简称OJ)是一个在线的判题系统.用户可以在线提交给定问题的多种程序(如C.C++.Pascal.Java)源代码,系统对源代码进行 ...
- 使用python划分数据集
无论是训练机器学习或是深度学习,第一步当然是先划分数据集啦,今天小白整理了一些划分数据集的方法,希望大佬们多多指教啊,嘻嘻~ 首先看一下数据集的样子,flower_data文件夹下有四个文件夹,每个文 ...