【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix
引用题解:http://blog.csdn.net/popoqqq/article/details/41084047
#include<cstdio>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
int n,m,a,b,q;
const ull seed1=17,seed2=19;
#define MOD 1000001
ull v[MOD],sum[1001][1001],ord[201],pow1[1001],pow2[1001];
char s[1001][1001];
int first[MOD],next[MOD],en;
void Insert(const ull &V)
{
int U=(int)(V%MOD);
v[en]=V;
next[en]=first[U];
first[U]=en++;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&a,&b);
memset(first,-1,sizeof(first));
ord['0']=1,ord['1']=2;
for(int i=1;i<=n;++i)
scanf("%s",s[i]+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sum[i][j]+=sum[i][j-1]*seed2;
pow1[0]=pow2[0]=1;
for(int i=1;i<=n;i++) pow1[i]=pow1[i-1]*seed1;
for(int i=1;i<=m;i++) pow2[i]=pow2[i-1]*seed2;
for(int i=a;i<=m;i++)
for(int j=b;j<=n;j++)
Insert(sum[i][j]
-sum[i-a][j]*pow1[a]
-sum[i][j-b]*pow2[b]
+sum[i-a][j-b]*pow1[a]*pow2[b]);
scanf("%d",&q);
for(;q;--q)
{
for(int i=1;i<=a;i++) scanf("%s",s[i]+1);
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1;
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
sum[i][j]+=sum[i][j-1]*seed2;
int o=(int)(sum[a][b]%MOD);
for(int i=first[o];i!=-1;i=next[i]) if(v[i]==sum[a][b]) {puts("1"); goto OUT;}
puts("0"); OUT:;
}
return 0;
}
【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix的更多相关文章
- BZOJ2351: [BeiJing2011]Matrix
2351: [BeiJing2011]Matrix Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 589 Solved: 171[Submit][S ...
- BZOJ2351[BeiJing2011]Matrix——二维hash
题目描述 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在原矩阵中出现过.所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...
- HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表
2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 ...
- redis哈希缓存数据表
redis哈希缓存数据表 REDIS HASH可以用来缓存数据表的数据,以后可以从REDIS内存数据库中读取数据. 从内存中取数,无疑是很快的. var FRedis: IRedisClient; F ...
- 2351: [BeiJing2011]Matrix( hash )
hash一下, 把原矩阵所有A*B的子矩阵的hash值存在set里面, 然后对于每个询问就求出hash值, 在set中查找. ------------------------------------- ...
- 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示
编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...
- 《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表
2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据.不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素.当这个定长数据是一个无符号整数时,可 ...
- AcWing - 156 矩阵(二维哈希)
题目链接:矩阵 题意:给定一个$m$行$n$列的$01$矩阵$($只包含数字$0$或$1$的矩阵$)$,再执行$q$次询问,每次询问给出一个$a$行$b$列的$01$矩阵,求该矩阵是否在原矩阵中出现过 ...
- bzoj 2351 [BeiJing2011]Matrix——二维哈希
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2351 就是先把每行单独从左到右扫着乘一个 b1 哈希起来,然后再按列从上往下乘一个 b2 哈 ...
随机推荐
- Tomcat启动报错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
测试tomcat的comet Java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet 异常 因为工程 ...
- 【洛谷 P1666】 前缀单词 (Trie)
题目链接 考试时暴搜50分...其实看到"单词","前缀"这种字眼时就要想到\(Trie\)的,哎,我太蒻了. 以一个虚点为根,建一棵\(Trie\),然后\( ...
- HBase表操作
相对于0.9.X版本,在HBase1.X版本对内部API改动比较大,例如连接部分类库变更,如下: 连接获取:org.apache.hadoop.hbase.HBaseConfiguration.cre ...
- linux 链表实例应用程序【转】
转自:http://blog.csdn.net/echo_qiang/article/details/6233057 /**************************************** ...
- hrtimer的简单使用 + 原理和实现【转】
转自:http://blog.csdn.net/beyondioi/article/details/9212795 1.hrtimers - 为高分辨率kernel定时器,可作为超时或周期性定时器使用 ...
- (12)Linux shell之read 用法
Linux shell之read 用法 #!/bin/bash#read 用来读取屏幕输入或是读取文件内容.read -p "please input you name: " ...
- Basic-Paxos协议日志同步应用
使用Basic-Paxos协议的日志同步与恢复 传统数据库保持服务持续可用通常采用1主N备, 既采取两种日志同步模式: Maximum Availability和Maximum Protection. ...
- Bean相关
Bean容器初始化: 本地文件是绝对路径,classpath是相对路径.例子如下: Bean配置项: 常用Bean的配置项: (1)id :在整个IOC容器中,这个bean的唯一标识 (2)class ...
- 【 Linux 】Keepalived实现双主模型高可用集群
要求: 1. 两台web服务器安装wordpress,数据库通过nfs共享 2. 使用keepalived实现双主模型 环境: 主机: 系统:CentOS6.7 x64 ...
- 浏览器内核测试 v0.99
操作系统: Windows 7 浏览器内核: WebKit 内核(Chrome) 内核版本是: WebKit 537.36( Chrome 49.0.2593.0 S) 完整代码: Mozilla/ ...