[BZOJ]2351 Matrix
来源:互联网 发布:无印良品有淘宝店吗 编辑:程序博客网 时间:2024/06/16 16:47
2351: [BeiJing2011]Matrix
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 896 Solved: 280
[Submit][Status][Discuss]
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
111
000
111
3
11
00
11
11
00
11
Sample Output
1
0
1
0
1
HINT
对于100%的实际测试数据,M、N ≤ 1000,Q = 1000
对于40%的数据,A = 1。
对于80%的数据,A ≤ 10。
对于100%的数据,A ≤ 100。
Source
HOME Back
二维哈希即可.
#include<stdio.h>#include<algorithm>#include<vector>using namespace std;const int maxn=1005;const int mod=10007;const int base1=9999987;const int base2=1000007;vector<int> G[mod];int hh,q,n,m,a,b,maxx;unsigned int sum[maxn][maxn],pow1[maxn],pow2[maxn];inline void insert(unsigned int x){ hh=((x>>3)+(x>>7)+x)%mod; G[hh].push_back(x);}inline bool check(unsigned int x){ hh=((x>>3)+(x>>7)+x)%mod; for(int i=0;i<G[hh].size();i++) if(G[hh][i]==x) return true; return false;}int main(){ scanf("%d%d%d%d",&m,&n,&a,&b),maxx=max(m,n),pow1[0]=pow2[0]=1; for(register int i=1;i<=m;i++) for(register int j=1;j<=n;j++) scanf("%1d",&sum[i][j]); for(register int i=1;i<=m;i++) for(register int j=1;j<=n;j++) sum[i][j]+=sum[i-1][j]*base1; for(register int i=1;i<=m;i++) for(register int j=1;j<=n;j++) sum[i][j]+=sum[i][j-1]*base2; for(register int i=1;i<=maxx;i++) pow1[i]=pow1[i-1]*base1,pow2[i]=pow2[i-1]*base2; for(register int i=a;i<=m;i++) for(register int j=b;j<=n;j++){ unsigned int seed=sum[i][j]-sum[i-a][j]*pow1[a]-sum[i][j-b]*pow2[b]+sum[i-a][j-b]*pow1[a]*pow2[b]; insert(seed);}scanf("%d",&q);while(q--){ for(register int i=1;i<=a;i++) for(register int j=1;j<=b;j++) scanf("%1d",&sum[i][j]); for(register int i=1;i<=a;i++) for(register int j=1;j<=b;j++) sum[i][j]+=sum[i-1][j]*base1; for(register int i=1;i<=a;i++) for(register int j=1;j<=b;j++) sum[i][j]+=sum[i][j-1]*base2; puts(check(sum[a][b])?"1":"0");}}
阅读全文
0 0
- [BZOJ]2351 Matrix
- BZOJ 2351: [BeiJing2011]Matrix
- BZOJ 2351 BeiJing2011 Matrix Hash
- BZOJ 2351: [BeiJing2011]Matrix 哈希
- BZOJ 2351 Matrix (Hash)
- bzoj 2351: [BeiJing2011]Matrix(二维Hash)
- 【BZOJ 4128】 matrix
- [BZOJ 4128]Matrix
- BZOJ 4128 Matrix
- BZOJ 2003: [Hnoi2010]Matrix 矩阵
- BZOJ-2462&&2351 矩阵模板&&Matrix 暴力 or Hash orAC自动机 or KMP
- BZOJ 2462/2351 [BeiJing2011]矩阵模板/[BeiJing2011]Matrix 二维哈希
- BZOJ 4128 Matrix BSGS+矩阵求逆
- [BSGS 矩阵 随机化] BZOJ 4128 Matrix
- bzoj 4128: Matrix BSGS+矩阵乘法
- BZOJ 4128: Matrix BSGS 矩阵乘法
- BZOJ 4031 HEOI2015 小Z的房间 Matrix-Tree定理
- BZOJ 4128 Matrix Baby-Step-Giant-Step+矩阵求逆
- 上传jar到私服的两种方式From POM和GAV Parameters。使用Nexus管理Maven仓库时,上传带依赖的第三方jar.
- 计算机导论-符号化,计算化与自动化
- Http协议三次握手过程
- 区间DP思维起步
- nodejs-001nodejs初识及环境搭建
- [BZOJ]2351 Matrix
- L1-044. 稳赢
- ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
- Flask学习笔记--6
- jQuery的一些用法
- (0.1+0.7)*10!=8?
- H
- linux-原子操作
- ARP协议