1. 程式人生 > >BZOJ-2462: [BeiJing2011]矩陣模板 (宇宙無敵超級大暴力~)

BZOJ-2462: [BeiJing2011]矩陣模板 (宇宙無敵超級大暴力~)

描述 day sin sta time cnblogs 哪些 sof false

2462: [BeiJing2011]矩陣模板

Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 1278 Solved: 607
[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

Sample Output

1
0
1

HINT

對於100%的數據,N,M<=1000 A,B<=100

Source

Day4

正解是矩陣hash,laj不會寫於是就大暴力水過咯~
 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4
const int MAX=1005; 5 int n,m,q,a,b; 6 int aa[MAX][MAX],bb[MAX][MAX]; 7 int main(){ 8 freopen ("matrix.in","r",stdin);freopen ("matrix.out","w",stdout); 9 int i,j,k,x;char s[MAX]; 10 scanf("%d%d%d%d\n",&n,&m,&a,&b); 11 for (i=1;i<=n;i++){ 12 gets(s+1); 13
for (j=1;j<=m;j++) aa[i][j]=s[j]-0; 14 } 15 scanf("%d\n",&q); 16 while (q--){ 17 for (i=1;i<=a;i++){ 18 gets(s+1); 19 for (j=1;j<=b;j++) bb[i][j]=s[j]-0; 20 } 21 bool flag; 22 for (i=1;i<=n-a+1;i++) 23 for (j=1;j<=m-b+1;j++){ 24 flag=true; 25 for (k=i;k<=i+a-1;k++) 26 for (x=j;x<=j+b-1;x++) 27 if (aa[k][x]!=bb[k-i+1][x-j+1]) {flag=false;goto away;} 28 away:if (flag) goto awa; 29 } 30 awa:if (flag) puts("1"); 31 else puts("0"); 32 } 33 return 0; 34 }

BZOJ-2462: [BeiJing2011]矩陣模板 (宇宙無敵超級大暴力~)