[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,参见 ...
随机推荐
- 01背包 Codeforces Round #267 (Div. 2) C. George and Job
题目传送门 /* 题意:选择k个m长的区间,使得总和最大 01背包:dp[i][j] 表示在i的位置选或不选[i-m+1, i]这个区间,当它是第j个区间. 01背包思想,状态转移方程:dp[i][j ...
- Android 插件技术:动态加载dex技术初探
1.Android动态加载dex技术初探 http://blog.csdn.net/u013478336/article/details/50734108 Android使用Dalvik虚拟机加载可执 ...
- Android 线程池系列教程(2)Thread,Runnable是基类及如何写Run方法
Specifying the Code to Run on a Thread 上一课 下一课 1.This lesson teaches you to Define a Class that Im ...
- 转 ORA-00054 的解决方法
统有一个不用的索引,想删除这个索引, SQL> drop index GPSTIME_GLOBAL_INDEX 2 /drop index GPSTIME_GLOBAL_INDEX ...
- Java编码格式
简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Jav ...
- Python基础第一天
诞生时间:1991年,创造者Guido van Rossum 优点: 1.简单 Python是一种代表简单注意思想的语言 2.易学 Python是及其容易上手,因为Python有极其简单的说明文档 ...
- spark yarn cluster模式下任务提交和计算流程分析
spark可以运行在standalone,yarn,mesos等多种模式下,当前我们用的最普遍的是yarn模式,在yarn模式下又分为client和cluster.本文接下来将分析yarn clust ...
- Node.js搭建静态服务器
let http = require('http'); let url = require('url'); let fs = require('fs'); let path = require('pa ...
- JWT认证阐述
哥发达了,是时候实现一下儿时的梦想了,怡红院开起! 店面门脸装修如何?做生意,谁还没个镇店之宝啊?有请我的店长如花小姐! 没事哈!别怕,扭曲的五官往往都藏着一颗纯洁的心灵. 不管如何吧,我的怡红院算是 ...
- Dragger2解析(一)
依赖注入(DI-Dependency Injection) 什么是依赖注入 这是一种设计思想,一个面向对象的编程法则. DI能够让开发者写出低耦合代码,更加优良的程序. 更容易测试,代码健壮性更强. ...