BZOJ-2462: [BeiJing2011]矩陣模板 (宇宙無敵超級大暴力~)
阿新 • • 發佈:2017-11-07
描述 day sin sta time cnblogs 哪些 sof false
Submit: 1278 Solved: 607
[Submit][Status][Discuss]
111
000
111
3
11
00
11
11
00
11
0
1
2462: [BeiJing2011]矩陣模板
Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 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 2111
000
111
3
11
00
11
11
00
11
Sample Output
10
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; 4const 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); 13for (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]矩陣模板 (宇宙無敵超級大暴力~)